在ASP中传递参数时有一个很有用的系统函数Server.UrlEncode,可以将一些非字母数字的特殊符号转换成标准URL编码(其实就是16进制ASC码),这样就解决了参数传递问题,然后我以为也提供了Server.UrlDecode,但使用后却发现程序报错,原来系统并没有提供这个我想象中的解码函数。怎幺办,自己动手吧。
UrlEncode的原理其实很简单,就是将特殊字符转换成16进制ASC码值,那么译码函数就只要将16进制ASC转回对应的字符就OK了。
Function URLDecode(enStr)"URL解碼函數dim deStrdim c,i,vdeStr=""for i=1 to len(enStr)c=Mid(enStr,i,1)if c="%" thenv=eval("&h"+Mid(enStr,i+1,2))if v<128 thendeStr=deStr&chr(v)i=i+2elseif isvalidhex(mid(enstr,i,3)) thenif isvalidhex(mid(enstr,i+3,3)) thenv=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))deStr=deStr&chr(v)i=i+5elsev=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))deStr=deStr&chr(v)i=i+3end ifelsedestr=destr&cend ifend ifelseif c="+" thendeStr=deStr&" "elsedeStr=deStr&cend ifend ifnextURLDecode=deStr end functionfunction isvalidhex(str)isvalidhex=truestr=ucase(str)if len(str)<>3 then isvalidhex=false:exit functionif left(str,1)<>"%" then isvalidhex=false:exit functionc=mid(str,2,1)if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit functionc=mid(str,3,1)if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function end function
经测试gb312格式的asp使用没有问题。