Ajax乱码及Jquery传参乱码解决方法

Ajax技术是一种很流行,并且也很容易使用的技术,但是我们经常会遇到一个问题就是ajax中文乱码问题。

在我们使用ajax返回参数时经常会发现前台显示的是一堆乱码,而产生乱码的主要原因有:

(1) xtmlhttp 返回的数据默认的字符编码是“utf-8”,如果前台页面是“gb2312”或者其它编码数据就会产生乱码

(2) post 方法提交数据默认的字符编码是“utf-8”,如果后台是“gb2312”或其他编码数据就会产生乱码

解决的办法就是在送出的流里面加一个HEADER,指明送出的是什么编码流,这样XMLHTTP就不会乱搞了。
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");

上面所说的方法,在异步获取数据时是有效的,但是,在异步提交数据时往往会失效,哪怕在我们提交数据时用上了 Javascript 的函数 escape() 对提交的数据进行编码。因此,解决Ajax乱码最完美的方法,看来只有将网页的编码改用“utf-8”,至少是与 Ajax 相关的所有网页必须用“utf-8”编码。

今天在做一个注册和登陆的页面时,我使用是Jquery里面的Ajax技术进行数据提交,刚开始使用英文注册没有发现什么问题,但是后面使用中文注册发现显示了一堆乱码,并且保存在数据库中的也是乱码,于是我就查找原因,发现使用上面的方法无法解决,后来我发现在使用ajax Post方法提交了参数之后所有的中文字符马上被成了乱码,于是我怀疑是JQuery的ajax传参时产生了乱码,于是我在网上搜索了一下,发现了一下的解决方法,首先将要进行提交的参数使用javascript的escape函数进行编码,然后再进行数据提交,然后在参数的接收页面进行解码,但是因为原因是使用javascritp进行的编码,所以不能直接在asp中使用vbscript进行解码,于是在网上看到了一个可以在Vbscript对Javascript编码的字符进行解码的函数,于是就试了一下,问题解决。

下面是ASP 下的escape() 函数和unescape() 函数的具体实现代码,escape函数实现原理将中文字符转换为十六进制编码进行传递,unesape函数则相反:
<%
'escape()函数实现,不变的7个符号: *(42) +(43) -(45) .(46) /(47) @(64) _(95)
Function VBsEscape(str)
 dim i,s,c,a
 s=""
 For i=1 to Len(str)
 c=Mid(str,i,1)
 a=ASCW(c)
 If (a>=48 and a<=57) or (a>=65 and a<=90) or (a>=97 and a<=122) Then
 s = s & c
 ElseIf InStr("@*_+-./",c)>0 Then
 s = s & c
 ElseIf a>0 and a<16 Then
 s = s & "%0" & Hex(a)
 ElseIf a>=16 and a<256 Then
 s = s & "%" & Hex(a)
 Else
 s = s & "%u" & Hex(a)
 End If
 Next
 VBsEscape = s
End Function

'unescape()函数
Function VBsUnEscape(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
 VBsUnEscape = s
End Function
%>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值