ASP 系统自带有一个 Server.URLEncode,但本文还是提供了一个自定义的 URLEncode 以及 URLDecode。源代码收集自网上。
<%
Function URLEncode_Gb(ByVal str)
Dim i,s
Dim B,bCode,gb,Hight8b,Low8b
s = ""
For i = 1 To Len(str)
B = Mid(str,i,1)
bCode=Abs(Asc(B))
If (bCode>=48 And bCode<=57) Or (bCode>=65 And bCode<=90) Or (bCode>=97 And bCode<=122) Or bCode=42 Or bCode=45 Or bCode=46 Or bCode=64 Or bCode=95 Then
''48 to 57代表0~9;65 to 90代表A~Z;97 to 122代表a~z
''42代表*;46代表.;64代表@;45代表-;95代表_
s=s & B
ElseIf bCode=32 Then ''空格转成+
s=s & "+"
ElseIf bCode<128 Then ''低于128的Ascii转成1个字节
s=s & "%" & Right("00" & Hex(bCode),2)
Else
gb = Asc(B)
If gb < 0 Then
gb = gb + &H10000 ''gb编码为负数,要加上65536
End If
Hight8b = (gb And &HFF00) / &H100 ''二进制高8位
Low8b = gb And &HFF ''二进制低8位
s = s & "%" & Hex(Hight8b) & "%" & Hex(Low8b)
End If
Next
URLEncode_Gb = s
End Function
Function URLDecode_Gb(ByVal str)
Dim i,s
Dim B,bCode,gb,Hight8b,Low8b
s = ""
For i = 1 To Len(str)
B = Mid(str,i,1)
Select Case B
Case "+"
s=s & " "
Case "%"
gb=Mid(str,i+1,2)
bCode=CInt("&H" & gb)
If bCode<128 Then
i=i+2
Else
bCode=CInt("&H" & gb & Mid(str,i+4,2))
i=i+5
End If
s=s & Chr(bCode)
Case Else
s=s & B
End Select
Next
URLDecode_Gb = s
End Function
dim str
str = "1?aITPOW"
Response.Write(Server.URLEncode(str) & "<br />")
Response.Write(URLEncode_Gb(str) & "<br />")
Response.Write(URLDecode_Gb(str) & "<br />")
%>
结果为
1%3Fa%C7%A7%D2%BB
1%3Fa%C7%A7%D2%BB
1?aITPOW