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使用没有问题。