ASP URL编码及反编码函数实现
asp中对url处理的功能不够完善。server.urlencode用起来不方便。而且没有提供decode方法(.net中有)
所以,很多有此需求的人都自己写了相关的方法实现。下面是我的实现代码
先说明一下:
一、编码的时候只作ascii编码,但解码时考虑了unicode编码(%u起头的),类似js中的unescape
二、最后一个函数是将十六进制转换成十进制的方法。也是本人原创。
其实这个功能很容易实现,方法也很多,但我觉得这个方法无论从性能还是安全性上都是最好的。
网上流传最广的是eval("&H" & str)这种转换。就本人测试的性能来讲,和dHex函数相差无几,但安全性就不够了。
比如,字符串中混入了a-f以外的字符,那么eval就会出错.如果字符串是接收来的,必须经过过滤才行,否则,有很大的安全隐患。
而这个dHex会将字符串中除了1-f以外的字符全部视为0,保证最后返回的是数字.
有点跑题了。上代码
'测试内容,使用了unicode编码.普通编码一样通用 a="%u592E%u4EA7%u623F%uFF0C%u5DF2%u7ECF%u53EF%u4EE5%u4E0A%u5E02%u3002%u4EA4%u901A%u4FBF%u5229%uFF0C" Response.Write URLDecode(a) '****************************** '函数:URLEncode(strURL) '参数:str 要编码或解码的字符 '作者:白雨临风 '日期:2011/8/18 '描述:URL编码及反编码函数 '示例:URLEncode(strURL) 'update:2011/11/10 '增加%u格式解码 '****************************** Function URLEncode( strURL) Dim I, x, l, cArr() l = Len(strURL) ReDim cArr(l) For I = 1 To l x=Asc(Mid(strURL, I, 1)) If x < 0 Then x=CStr(Hex(x)) cArr(I) = "%" & Left(x, Len(x) - 2) & "%" & Right(x, 2) ElseIf (x >= 65 And x <= 90) Or (x >= 97 And x <= 122) Then cArr(I) = Chr(x) Else cArr(I) = "%" & Hex(x) End If Next URLEncode = Join(cArr,"") End Function Function URLDecode( strURL) Dim I, l, x, dStr, u l = Len(strURL) For I = 1 To l x=Mid(strURL, I, 1) If x = "%" Then u=Mid(strURL, I + 1, 1) If u="u" Then x=Mid(strURL, I + 2, 4) dStr = dStr & Chrw(dHex(x)) I = I + 5 Else x=Mid(strURL, I + 1, 2) If dHex(x) > 127 Then dStr = dStr & Chr(dHex(x & Mid(strURL, I + 4, 2))) I = I + 5 Else dStr = dStr & Chr(dHex(x)) I = I + 2 End If End If Else dStr = dStr & x End If Next URLDecode = dStr End Function '十六进制转换十进制函数 Const HEX_MAP = "123456789ABCDEF" Function dHex( strin) Dim i, result, l l = Len(strin) result = 0 For i = 1 To l result = result + InStr(HEX_MAP,Mid(strin, i, 1))*(16^(l-i)) Next dHex = result End Function