Thread: Общие вопросы (General Questions)/URL Encoder and Decoder for VB

URL Encoder and Decoder for VB

www.freevbcode.com/ShowCode.asp


Public Function URLEncode(StringToEncode As String, Optional _

   UsePlusRatherThanHexForSpace As Boolean = False) As String


Dim TempAns As String

Dim CurChr As Integer

CurChr = 1

Do Until CurChr - 1 = Len(StringToEncode)

  Select Case Asc(Mid(StringToEncode, CurChr, 1))

    Case 48 To 57, 65 To 90, 97 To 122

      TempAns = TempAns & Mid(StringToEncode, CurChr, 1)

    Case 32

      If UsePlusRatherThanHexForSpace = True Then

        TempAns = TempAns & "+"

      Else

        TempAns = TempAns & "%" & Hex(32)

      End If

   Case Else

         TempAns = TempAns & "%" & _

              Format(Hex(Asc(Mid(StringToEncode, _

              CurChr, 1))), "00")

End Select


  CurChr = CurChr + 1

Loop


URLEncode = TempAns

End Function




Public Function URLDecode(StringToDecode As String) As String


Dim TempAns As String

Dim CurChr As Integer


CurChr = 1


Do Until CurChr - 1 = Len(StringToDecode)

  Select Case Mid(StringToDecode, CurChr, 1)

    Case "+"

      TempAns = TempAns & " "

    Case "%"

      TempAns = TempAns & Chr(Val("&h" & _

         Mid(StringToDecode, CurChr + 1, 2)))

       CurChr = CurChr + 2

    Case Else

      TempAns = TempAns & Mid(StringToDecode, CurChr, 1)

  End Select


CurChr = CurChr + 1

Loop


URLDecode = TempAns

End Function




' URLDecode function in Perl for reference

' both VB and Perl versions must return same

'

' sub urldecode{

'  local($val)=@_;

'  $val=~s/\+/ /g;

'  $val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;

'  return $val;

' }