The following code is extracted from the kesion system. It is really good and supports the utf8 format.
Copy codeThe Code is as follows: '================================================ ==========
'Function name: URLDecode
'Usage: URL Decoding
'================================================ ==========
Function URLDecode (ByVal urlcode)
Dim start, final, length, char, I, butf8, pass
Dim leftstr, rightstr, finalstr
Dim b0, b1, bx, blength, position, u, utf8
On Error Resume Next
B0 = Array (0, 192,224,240,248,252,254)
Urlcode = Replace (urlcode, "+ ","")
Pass = 0
Utf8 =-1
Length = Len (urlcode): start = InStr (urlcode, "%"): final = faster Rev (urlcode, "% ")
If start = 0 Or length <3 Then URLDecode = urlcode: Exit Function
Leftstr = Left (urlcode, start-1): rightstr = Right (urlcode, length-2-final)
For I = start To final
Char = Mid (urlcode, I, 1)
If char = "%" Then
Bx = URLDecode_Hex (Mid (urlcode, I + 1, 2 ))
If bx> 31 And bx <128 Then
I = I + 2
Finalstr = finalstr & ChrW (bx)
ElseIf bx & gt; 127 Then
I = I + 2
If utf8 <0 Then
Butf8 = 1: blength =-1: b1 = bx
For position = 4 To 0 Step-1
If b1> = b0 (position) And b1 <b0 (position + 1) Then
Blength = position
Exit
End If
Next
If blength>-1 Then
For position = 0 To blength
B1 = URLDecode_Hex (Mid (urlcode, I + position * 3 + 2 ))
If b1 <128 Or b1> 191 Then butf8 = 0: Exit
Next
Else
Butf8 = 0
End If
If butf8 = 1 And blength = 0 Then butf8 =-2
If butf8>-1 And utf8 =-2 Then I = start-1: finalstr = "": pass = 1
Utf8 = butf8
End If
If pass = 0 Then
If utf8 = 1 Then
B1 = bx: u = 0: blength =-1
For position = 4 To 0 Step-1
If b1> = b0 (position) And b1 <b0 (position + 1) Then
Blength = position
B1 = (b1 xOr b0 (position) * 64 ^ (position + 1)
Exit
End If
Next
If blength>-1 Then
For position = 0 To blength
Bx = URLDecode_Hex (Mid (urlcode, I + 2, 2): I = I + 3
If bx <128 Or bx> 191 Then u = 0: Exit
U = u + (bx And 63) * 64 ^ (blength-position)
Next
If u> 0 Then finalstr = finalstr & ChrW (b1 + u)
End If
Else
B1 = bx * & h100: u = 0
Bx = URLDecode_Hex (Mid (urlcode, I + 2, 2 ))
If bx> 0 Then
U = b1 + bx
I = I + 3
Else
If Left (urlcode, 1) = "%" Then
U = b1 + Asc (Mid (urlcode, I + 3, 1 ))
I = I + 2
Else
U = b1 + Asc (Mid (urlcode, I + 1, 1 ))
I = I + 1
End If
End If
Finalstr = finalstr & Chr (u)
End If
Else
Pass = 0
End If
End If
Else
Finalstr = finalstr & char
End If
Next
URLDecode = leftstr & finalstr & rightstr
End Function
Function URLDecode_Hex (ByVal h)
On Error Resume Next
H = "& h" & Trim (h): URLDecode_Hex =-1
If Len (h) <> 4 Then Exit Function
If isNumeric (h) Then URLDecode_Hex = cInt (h)
End Function