23
Октябрь
2009
URL Encoding. Ascii-вариант
URL Encoding. Ascii-вариант
Public Function URLEncode_Ascii(ByVal plain_text As String) As String Dim i As Long, ts As String, cur_char As Byte Dim reserved_symbols_allowed As String, unreserved_symbols As String Static flagTableInited As Boolean Static ascii_map(0 To 255) As String If Not flagTableInited Then ' Незарезервированные символы. ' Символы допустимые в URL unreserved_symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~" For i = 1 To Len(unreserved_symbols) ascii_map(Asc(Mid$(unreserved_symbols, i, 1))) = Mid$(unreserved_symbols, i, 1) Next i ' Зарезервированные символы: !*'();:@&=+$,/?%#[] и пробел ' Спецсимволы которые не должны появляться в URI. ' Но в зависимости от контекста некоторые из них могут быть разрешены и не должны быть закодированы reserved_symbols_allowed = "" For i = 1 To Len(reserved_symbols_allowed) ascii_map(Asc(Mid$(reserved_symbols_allowed, i, 1))) = Mid$(reserved_symbols_allowed, i, 1) Next i ' Все остальные символы For i = 0 To 255 If i < 16 Then ascii_map(i) = "%0" & Hex$(i) Else If Len(ascii_map(i)) = 0 Then ascii_map(i) = "%" & Hex$(i) End If Next i flagTableInited = True End If For i = 1 To Len(plain_text) ts = ts & ascii_map(Asc(Mid$(plain_text, i, 1))) Next i URLEncode_Ascii = ts End Function Public Function URLDecode_Ascii(ByVal urlencoded_text As String) As String Dim i As Long, ts As String i = 1 For i = 1 To Len(urlencoded_text) If Asc(Mid$(urlencoded_text, i, 1)) = Asc("%") Then If i + 2 <= Len(urlencoded_text) Then ts = ts & Chr$(Val("&h" & Mid$(urlencoded_text, i + 1, 2))) i = i + 2 Else ' Ошибка. Кривая строка End If Else ts = ts & Mid$(urlencoded_text, i, 1) End If Next i URLDecode_Ascii = ts End Function
Пример использования:
Dim URL As String, URL_coded As String URL = "абв" URL_coded = URLEncode_Ascii(URL) MsgBox URL_coded & vbCrLf & URLDecode_Ascii(URL_coded)