urldecode 方法补遗

作者: 来源: 日期:2009-4-19

asp 里面没有 urldecode 函数,好象 aspx 里有吧,我不太清楚,但 asp 里面还是用得很多。在网上查找了有别人写的 urldecode 函数,但是这个函数有错误,而且在一些方面写得比较难理解。而且有错误,当里面有生僻双字节文字时就会产生错误,如“乄”经urlencoder后为“%81W”,解码就不能成功。

其实双字节编码在这里只要把 "W" 也编成 16 进制 ASC 码就可以。

知识点:计算机里的 cookie 也是经过 urlencode 编码的,所以 urldecode 对破解 cookie 也很有用呵。

下面是源代码:

Function URLDecode(enStr)
    dim deStr
    dim c, i, v
    deStr = ""
    for i = 1 to len(enStr)
        c = Mid(enStr,i,1)
        if c = "%" then
            v = eval("&h"+Mid(enStr,i+1,2))
            if v < 128 then
                deStr = deStr&chr(v)
                i = i + 2
            else
                if isvalidhex(mid(enstr, i, 3)) then
                   if isvalidhex(mid(enstr, i + 3, 3)) then
                        v = eval("&h" + Mid(enStr, i + 1, 2) + Mid(enStr, i + 4, 2))
                        deStr = deStr&chr(v)
                        i = i + 5
                    else
                        v = eval("&h" + Mid(enStr, i + 1, 2) + cstr(hex(asc(Mid(enStr, i + 3, 1)))))
                        deStr = deStr&chr(v)
                        i = i + 3
                    end if
                else
                    destr = destr & c
                end if
            end if
        else
            if c = "+" then
                deStr = deStr & " "
            else
                deStr = deStr & c
            end if
        end if
    next
    URLDecode = deStr
end function
 
function isvalidhex(str)
    isvalidhex = true
    str = ucase(str)
    if len(str) <> 3 then isvalidhex = false : exit function
    if left(str, 1) <> "%" then isvalidhex = false : exit function
    c = mid(str, 2, 1)
    if not (((c >= "0") and (c <= "9")) or ((c >= "A") and (c <= "Z"))) then isvalidhex = false : exit function
    c = mid(str, 3, 1)
    if not (((c >= "0") and (c<="9")) or ((c >= "A") and (c <= "Z"))) then isvalidhex = false : exit function
end function

你用此方法解码“%81W”看看,可以了。

当然,你还可以玩点小段,使之成为自己的一种字符串加密方式。

相关文章