我现在的位置:

微知识 - 知识分享 - 电脑网络 - 编程开发
知识分享
  1. ASP中只有UrlEncode编码函数,没有UrlDecode解码函数怎么办?

    完善时间:2017-07-23 01:14:40会员:bekda目录:电脑网络 - 编程开发浏览:2040 次

        ASP的Server对象有个URLEncode方法 Server.UrlEncode 可以对地址进行编码,将一些非字母数字的特殊符号转换成标准URL编码(16进制ASC码),解决了参数传递问题,但却没有相应的解码函数,也就是将16进制ASC转回对应的字符,下边的这个函数可以实现对URLEncode的解码,支持utf8格式。


    URL解码函数:URLDecode

    <%
    '================================================ 
    '函数名:URLDecode 
    '作 用:URL解码 
    '================================================ 
    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(192,224,240,248,252,254) 
    urlcode = Replace(urlcode,"+"," ") 
    pass = 0 
    utf8 = -1 
    
    length = Len(urlcode) : start = InStr(urlcode,"%") : final = InStrRev(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 > 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 For 
    End If 
    Next 
    If blength > -1 Then 
    For position = 0 To blength 
    b1 = URLDecode_Hex(Mid(urlcode,i + position * 3 + 2,2)) 
    If b1 < 128 Or b1 > 191 Then butf8 = 0 : Exit For 
    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 For 
    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 For 
    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
    %>


联系方式:

南京贝加达电子科技有限公司

  • 地址:南京市江北新区柳州北路21号涤太太科技大楼2F
  • 联系人:焦倩华(先生)
  • 手机:13813916308
  • 邮箱:Ser@bekda.com
  • 服务专线:400-8282-116
©2010-2024 Bekda Electronic Technology Co., Ltd. All right reserved.

苏公网安备 32011102010041号

320111201705278429

苏ICP备12027725号