URLEncode、URLDecode-ASP ANSI 版本

作者: 来源: 日期:2009-10-20

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
相关文章