asp全局使用utf-8编码,一切正常,但是通过url传递中文参数,用Request.QueryString()获取参数的值的时候会出现乱码的现象。
解决方法一、
可以通过传递参数的时候用js把中文用urlencode编码,再在asp页面用urldecode解码。注意 js的urlencode是utf-8的,asp页面的decode也要保持utf-8的解码才行。
asp的urldecode函数utf-8版本的代码如下:
Private Function UrlEncode_GBToUtf8(szInput) Dim wch, uch, szRet Dim x Dim nAsc, nAsc2, nAsc3 If szInput = "" Then UrlEncode_GBToUtf8_V2= szInput Exit Function End If For x = 1 To Len(szInput) wch = Mid(szInput, x, 1) nAsc = AscW(wch) If nAsc < 0 Then nAsc = nAsc + 65536 If wch = "+" then szRet = szRet & "%2B" ElseIf wch = "%" then szRet = szRet & "%25" ElseIf (nAsc And &HFF80) = 0 Then szRet = szRet & wch Else If (nAsc And &HF000) = 0 Then uch = "%" & Hex(((nAsc \ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80) szRet = szRet & uch Else uch = "%" & Hex((nAsc \ 2 ^ 12) Or &HE0) & "%" & _ Hex((nAsc \ 2 ^ 6) And &H3F Or &H80) & "%" & _ Hex(nAsc And &H3F Or &H80) szRet = szRet & uch End If End If Next UrlEncode_GBToUtf8= szRet End Function
方法二、传递时用js的escape函数把中文编码,再在asp端解码
asp端的解码函数代码如下:
Function UnEscape(str) Dim i, s, c s = "" For i = 1 To Len(str) c = Mid(str, i, 1) If Mid(str, i, 2) = "%u" And i <= Len(str) - 5 Then If IsNumeric("&H" & Mid(str, i + 2, 4)) Then s = s & CHRW(CInt("&H" & Mid(str, i + 2, 4))) i = i + 5 Else s = s & c End If ElseIf c = "%" And i <= Len(str) - 2 Then If IsNumeric("&H" & Mid(str, i + 1, 2)) Then s = s & CHRW(CInt("&H" & Mid(str, i + 1, 2))) i = i + 2 Else s = s & c End If Else s = s & c End If Next UnEscape = s End Function