ASP中只有UrlEncode,没有Urldecode问题的解决方法?
在ASP中传递参数时有一个很有用的系统函数Server.UrlEncode,可以将一些非字母数字的特殊符号转换成标准URL编码(其实就是16进制ASC码),这样就解决了参数传递问题,然后我以为也提供了Server.UrlDecode,但使用后却发现程序报错,原来系统并没有提供这个我想象中的解码函数。怎幺办,自己动手吧。
UrlEncode的原理其实很简单,就是将特殊字符转换成16进制ASC码值,那么译码函数就只要将16进制ASC转回对应的字符就OK了。
FunctionURLDecode(enStr)'URL解碼函數
dimdeStr
dimc,i,v
deStr=""
fori=1tolen(enStr)
c=Mid(enStr,i,1)
ifc="%"then
v=eval("&h"+Mid(enStr,i+1,2))
ifv<128then
deStr=deStr&chr(v)
i=i+2
else
ifisvalidhex(mid(enstr,i,3))then
ifisvalidhex(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
endif
else
destr=destr&c
endif
endif
else
ifc="+"then
deStr=deStr&""
else
deStr=deStr&c
endif
endif
next
URLDecode=deStr
endfunction
functionisvalidhex(str)
isvalidhex=true
str=ucase(str)
iflen(str)<>3thenisvalidhex=false:exitfunction
ifleft(str,1)<>"%"thenisvalidhex=false:exitfunction
c=mid(str,2,1)
ifnot(((c>="0")and(c<="9"))or((c>="A")and(c<="Z")))thenisvalidhex=false:exitfunction
c=mid(str,3,1)
ifnot(((c>="0")and(c<="9"))or((c>="A")and(c<="Z")))thenisvalidhex=false:exitfunction
endfunction
经测试gb312格式的asp使用没有问题。