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”看看,可以了。
当然,你还可以玩点小段,使之成为自己的一种字符串加密方式。