您的位置:首页 > Web前端 > JQuery

asp接收jquery post 中文乱码问题!

2015-10-15 14:17 573 查看
这个问题的解决主要还是通过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"%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: