URLEncode (VB Function)

Visual Basic Modules Add comments

Here's a simple function I wrote for URL Encoding a string in Visual Basic. I also have a list of URL Escape Codes available for download as well.

Download URLEncode.bas (June 01, 2005)

Public Function URLEncode(ByVal input_url As String) As String
 Dim count As Long
 Dim one_char As String
 URLEncode = ""
 For count = 1 To Len(input_url)
  one_char = Mid$(input_url, count, 1)
  If InStr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", UCase$(one_char)) = 0 Then
   one_char = "%" & Right$("0" & Hex$(Asc(one_char)), 2)
  End If
  URLEncode = URLEncode & one_char
 Next
End Function

Which is a slight improvement over my first version here...

Public Function URLEncode(input_url As String) As String
 input_url = Replace(input_url, Chr$(10), "%0A") 'LF
 input_url = Replace(input_url, Chr$(13), "%0D") 'CR
 input_url = Replace(input_url, Chr$(32), "%20") 'space
 input_url = Replace(input_url, Chr$(33), "%21") '!
 input_url = Replace(input_url, Chr$(34), "%22") '"
 input_url = Replace(input_url, Chr$(35), "%23") '#
 input_url = Replace(input_url, Chr$(36), "%24") '$
 input_url = Replace(input_url, Chr$(37), "%25") '%
 input_url = Replace(input_url, Chr$(38), "%26") '&
 input_url = Replace(input_url, Chr$(39), "%27") ''
 input_url = Replace(input_url, Chr$(40), "%28") '(
 input_url = Replace(input_url, Chr$(41), "%29") ')
 input_url = Replace(input_url, Chr$(42), "%2A") '*
 input_url = Replace(input_url, Chr$(43), "%2B") '+
 input_url = Replace(input_url, Chr$(44), "%2C") ',
 input_url = Replace(input_url, Chr$(45), "%2D") '-
 input_url = Replace(input_url, Chr$(46), "%2E") '.
 input_url = Replace(input_url, Chr$(47), "%2F") '/
 input_url = Replace(input_url, Chr$(58), "%3A") ':
 input_url = Replace(input_url, Chr$(59), "%3B") ';
 input_url = Replace(input_url, Chr$(60), "%3C") '<
 input_url = Replace(input_url, Chr$(61), "%3D") '=
 input_url = Replace(input_url, Chr$(62), "%3E") '>
 input_url = Replace(input_url, Chr$(63), "%3F") '?
 input_url = Replace(input_url, Chr$(64), "%40") '@
 input_url = Replace(input_url, Chr$(91), "%5B") '[
 input_url = Replace(input_url, Chr$(92), "%5C") '\
 input_url = Replace(input_url, Chr$(93), "%5D") ']
 input_url = Replace(input_url, Chr$(94), "%5E") '^
 input_url = Replace(input_url, Chr$(95), "%5F") '_
 input_url = Replace(input_url, Chr$(96), "%60") '`
 input_url = Replace(input_url, Chr$(123), "%7B") '{
 input_url = Replace(input_url, Chr$(124), "%7C") '|
 input_url = Replace(input_url, Chr$(125), "%7D") '}
 input_url = Replace(input_url, Chr$(126), "%7E") '~
 input_url = Replace(input_url, Chr$(127), "%7F") 'DEL
 input_url = Replace(input_url, Chr$(128), "%80")
 input_url = Replace(input_url, Chr$(129), "%81")
 input_url = Replace(input_url, Chr$(130), "%82")
 input_url = Replace(input_url, Chr$(131), "%83")
 input_url = Replace(input_url, Chr$(132), "%84")
 input_url = Replace(input_url, Chr$(133), "%85")
 input_url = Replace(input_url, Chr$(134), "%86")
 input_url = Replace(input_url, Chr$(135), "%87")
 input_url = Replace(input_url, Chr$(136), "%88")
 input_url = Replace(input_url, Chr$(137), "%89")
 input_url = Replace(input_url, Chr$(138), "%8A")
 input_url = Replace(input_url, Chr$(139), "%8B")
 input_url = Replace(input_url, Chr$(140), "%8C")
 input_url = Replace(input_url, Chr$(141), "%8D")
 input_url = Replace(input_url, Chr$(142), "%8E")
 input_url = Replace(input_url, Chr$(143), "%8F")
 input_url = Replace(input_url, Chr$(144), "%90")
 input_url = Replace(input_url, Chr$(145), "%91")
 input_url = Replace(input_url, Chr$(146), "%92")
 input_url = Replace(input_url, Chr$(147), "%93")
 input_url = Replace(input_url, Chr$(148), "%94")
 input_url = Replace(input_url, Chr$(149), "%95")
 input_url = Replace(input_url, Chr$(150), "%96")
 input_url = Replace(input_url, Chr$(151), "%97")
 input_url = Replace(input_url, Chr$(152), "%98")
 input_url = Replace(input_url, Chr$(153), "%99")
 input_url = Replace(input_url, Chr$(154), "%9A")
 input_url = Replace(input_url, Chr$(155), "%9B")
 input_url = Replace(input_url, Chr$(156), "%9C")
 input_url = Replace(input_url, Chr$(157), "%9D")
 input_url = Replace(input_url, Chr$(158), "%9E")
 input_url = Replace(input_url, Chr$(159), "%9F")
 input_url = Replace(input_url, Chr$(160), "%A0")
 input_url = Replace(input_url, Chr$(161), "%A1")
 input_url = Replace(input_url, Chr$(162), "%A2")
 input_url = Replace(input_url, Chr$(163), "%A3")
 input_url = Replace(input_url, Chr$(164), "%A4")
 input_url = Replace(input_url, Chr$(165), "%A5")
 input_url = Replace(input_url, Chr$(166), "%A6")
 input_url = Replace(input_url, Chr$(167), "%A7")
 input_url = Replace(input_url, Chr$(168), "%A8")
 input_url = Replace(input_url, Chr$(169), "%A9")
 input_url = Replace(input_url, Chr$(170), "%AA")
 input_url = Replace(input_url, Chr$(171), "%AB")
 input_url = Replace(input_url, Chr$(172), "%AC")
 input_url = Replace(input_url, Chr$(173), "%AD")
 input_url = Replace(input_url, Chr$(174), "%AE")
 input_url = Replace(input_url, Chr$(175), "%AF")
 input_url = Replace(input_url, Chr$(176), "%B0")
 input_url = Replace(input_url, Chr$(177), "%B1")
 input_url = Replace(input_url, Chr$(178), "%B2")
 input_url = Replace(input_url, Chr$(179), "%B3")
 input_url = Replace(input_url, Chr$(180), "%B4")
 input_url = Replace(input_url, Chr$(181), "%B5")
 input_url = Replace(input_url, Chr$(182), "%B6")
 input_url = Replace(input_url, Chr$(183), "%B7")
 input_url = Replace(input_url, Chr$(184), "%B8")
 input_url = Replace(input_url, Chr$(185), "%B9")
 input_url = Replace(input_url, Chr$(186), "%BA")
 input_url = Replace(input_url, Chr$(187), "%BB")
 input_url = Replace(input_url, Chr$(188), "%BC")
 input_url = Replace(input_url, Chr$(189), "%BD")
 input_url = Replace(input_url, Chr$(190), "%BE")
 input_url = Replace(input_url, Chr$(191), "%BF")
 input_url = Replace(input_url, Chr$(192), "%C0")
 input_url = Replace(input_url, Chr$(193), "%C1")
 input_url = Replace(input_url, Chr$(194), "%C2")
 input_url = Replace(input_url, Chr$(195), "%C3")
 input_url = Replace(input_url, Chr$(196), "%C4")
 input_url = Replace(input_url, Chr$(197), "%C5")
 input_url = Replace(input_url, Chr$(198), "%C6")
 input_url = Replace(input_url, Chr$(199), "%C7")
 input_url = Replace(input_url, Chr$(200), "%C8")
 input_url = Replace(input_url, Chr$(201), "%C9")
 input_url = Replace(input_url, Chr$(202), "%CA")
 input_url = Replace(input_url, Chr$(203), "%CB")
 input_url = Replace(input_url, Chr$(204), "%CC")
 input_url = Replace(input_url, Chr$(205), "%CD")
 input_url = Replace(input_url, Chr$(206), "%CE")
 input_url = Replace(input_url, Chr$(207), "%CF")
 input_url = Replace(input_url, Chr$(208), "%D0")
 input_url = Replace(input_url, Chr$(209), "%D1")
 input_url = Replace(input_url, Chr$(210), "%D2")
 input_url = Replace(input_url, Chr$(211), "%D3")
 input_url = Replace(input_url, Chr$(212), "%D4")
 input_url = Replace(input_url, Chr$(213), "%D5")
 input_url = Replace(input_url, Chr$(214), "%D6")
 input_url = Replace(input_url, Chr$(215), "%D7")
 input_url = Replace(input_url, Chr$(216), "%D8")
 input_url = Replace(input_url, Chr$(217), "%D9")
 input_url = Replace(input_url, Chr$(218), "%DA")
 input_url = Replace(input_url, Chr$(219), "%DB")
 input_url = Replace(input_url, Chr$(220), "%DC")
 input_url = Replace(input_url, Chr$(221), "%DD")
 input_url = Replace(input_url, Chr$(222), "%DE")
 input_url = Replace(input_url, Chr$(223), "%DF")
 input_url = Replace(input_url, Chr$(224), "%E0")
 input_url = Replace(input_url, Chr$(225), "%E1")
 input_url = Replace(input_url, Chr$(226), "%E2")
 input_url = Replace(input_url, Chr$(227), "%E3")
 input_url = Replace(input_url, Chr$(228), "%E4")
 input_url = Replace(input_url, Chr$(229), "%E5")
 input_url = Replace(input_url, Chr$(230), "%E6")
 input_url = Replace(input_url, Chr$(231), "%E7")
 input_url = Replace(input_url, Chr$(232), "%E8")
 input_url = Replace(input_url, Chr$(233), "%E9")
 input_url = Replace(input_url, Chr$(234), "%EA")
 input_url = Replace(input_url, Chr$(235), "%EB")
 input_url = Replace(input_url, Chr$(236), "%EC")
 input_url = Replace(input_url, Chr$(237), "%ED")
 input_url = Replace(input_url, Chr$(238), "%EE")
 input_url = Replace(input_url, Chr$(239), "%EF")
 input_url = Replace(input_url, Chr$(240), "%F0")
 input_url = Replace(input_url, Chr$(241), "%F1")
 input_url = Replace(input_url, Chr$(242), "%F2")
 input_url = Replace(input_url, Chr$(243), "%F3")
 input_url = Replace(input_url, Chr$(244), "%F4")
 input_url = Replace(input_url, Chr$(245), "%F5")
 input_url = Replace(input_url, Chr$(246), "%F6")
 input_url = Replace(input_url, Chr$(247), "%F7")
 input_url = Replace(input_url, Chr$(248), "%F8")
 input_url = Replace(input_url, Chr$(249), "%F9")
 input_url = Replace(input_url, Chr$(250), "%FA")
 input_url = Replace(input_url, Chr$(251), "%FB")
 input_url = Replace(input_url, Chr$(252), "%FC")
 input_url = Replace(input_url, Chr$(253), "%FD")
 input_url = Replace(input_url, Chr$(254), "%FE")
 input_url = Replace(input_url, Chr$(255), "%FF")
 URLEncode = input_url
End Function

MSDN Links
 UrlEscape Function Reference
 UrlUnescape Function Reference

2 Responses to “URLEncode (VB Function)”

  1. Filipe says:

    What happens to "http://" (and other) chars within the server address?

    Url encoding should only be done in the subfolder, file and params.

    ex: http://www.myserver.com/mydirectory/file1.htm?param1=test
    in this case would result:
    http%3A%2F%2Fwww.myserver.com%2Fmydirectory%2Fmyfile%2Ehtm%3Fparam1%3Dtest

    However, this is good code for param/file/directory name encoding once you only encode the right places. :)

  2. Jon says:

    You can also do this with the UrlEscape function found in shlwapi.dll.

    Public Const URL_DONT_SIMPLIFY As Long = &H8000000
    Public Const URL_ESCAPE_PERCENT As Long = &H1000
    Public Const URL_ESCAPE_SEGMENT_ONLY As Long = &H2000
    Public Const URL_MAX As Long = 3000
    Public Const URL_SUCCESS As Long = 0
    
    Public Declare Function UrlEscape Lib "shlwapi" Alias "UrlEscapeA" (ByVal pszURL As String, ByVal pszEscaped As String, pcchEscaped As Long, ByVal dwFlags As Long) As Long
    Public Declare Function UrlUnescape Lib "shlwapi" Alias "UrlUnescapeA" (ByVal pszURL As String, ByVal pszUnescaped As String, pcchUnescaped As Long, ByVal dwFlags As Long) As Long
    
    Public Function EncodeURL(ByVal strData As String) As String
     Dim Pos As Long, strTemp As String
     Pos = URL_MAX
     strTemp = Space$(URL_MAX)
     EncodeURL = IIf(UrlEscape(strData, strTemp, Pos, URL_ESCAPE_SEGMENT_ONLY Or URL_ESCAPE_PERCENT) = URL_SUCCESS, Left$(strTemp, Pos), strData)
    End Function
    
    Public Function DecodeURL(ByVal strData As String) As String
     Dim Pos As Long, strTemp As String
     Pos = URL_MAX
     strTemp = Space$(URL_MAX)
     DecodeURL = IIf(UrlUnescape(strData, strTemp, Pos, URL_DONT_SIMPLIFY) = URL_SUCCESS, Left$(strTemp, Pos), strData)
    End Function
    

Leave a Comment

Entries RSS Comments RSS Log in