asp接收jquery post 中文乱码问题!
这个问题的解决主要还是通过url编码对中文进行处理,在服务后台代码中,进行url解码处理。
但是问题来了,asp没有解码的内置函数,只有一个编码的内置函数UrlEncode,而用UrlEncode进行编码出来的字符和js内置的3个编码(escape,encodeURI,encodeURIComponent)函数编码出来的字符串也不一样,原因没深入的了解,但是应该是JS的编码函数是通过uft-8的编码方式进行字符串编码,而asp应是gb2312进行的。
基于对以上情况的分析基本找到了问题的原因,那么要怎么解决呢,我们需要对js传过来的编码过后的字符进行解码,以下是网上找到的一段解码函数:
Function URLDecode(enStr) dim deStr,strSpecial dim c,i,v deStr="" strSpecial="!""#$%&'()*+,.-_/:;< =>?@[/]^`{|}~%" for i=1 to len(enStr) c=Mid(enStr,i,1) if c="%" then v=eval("&h"+Mid(enStr,i+1,2)) if inStr(strSpecial,chr(v))>0 then deStr=deStr&chr(v) i=i+2 else v=eval("&h"+ Mid(enStr,i+1,2) + Mid(enStr,i+4,2)) deStr=deStr & chr(v) i=i+5 end if else if c="+" then deStr=deStr&" " else deStr=deStr&c end if end if next URLDecode=deStr End function
这个函数可以对asp内置编码函数进行解码,但显然不是我们要的,我们要的是对utf-8方式进行编码的字符进行解码,于是又在网上找到了一个utf-8的解码代码:
Function UrlDecode_GBToUtf8(ByVal str) Dim B,ub ''中文字的Unicode码(2字节) Dim UtfB ''Utf-8单个字节 Dim UtfB1, UtfB2, UtfB3 ''Utf-8码的三个字节 Dim i, n, s n=0 ub=0 For i = 1 To Len(str) B=Mid(str, i, 1) Select Case B Case "+" s=s & " " Case "%" ub=Mid(str, i + 1, 2) UtfB = CInt("&H" & ub) If UtfB<128 Then i=i+2 s=s & ChrW(UtfB) Else UtfB1=(UtfB And &H0F) * &H1000 ''取第1个Utf-8字节的二进制后4位 UtfB2=(CInt("&H" & Mid(str, i + 4, 2)) And &H3F) * &H40 ''取第2个Utf-8字节的二进制后6位 UtfB3=CInt("&H" & Mid(str, i + 7, 2)) And &H3F ''取第3个Utf-8字节的二进制后6位 s=s & ChrW(UtfB1 Or UtfB2 Or UtfB3) i=i+8 End If Case Else ''Ascii码 s=s & B End Select Next UrlDecode_GBToUtf8 = s End Function
最后我们为了页面的编码统一一般会在页面最上方加入asp的编码声明(基于gb2312的):
<%@ codepage=936%> <%Response.Charset = "gb2312"%>
如果是utf-8的就用:
<%@ codepage=65001%> <%Response.Charset = "utf-8"%>