让我们一起爱米兰
站内搜搜:
移动设备
请扫描二维码
或访问
m.milan100.com
您所在的位置 -> 米兰百分百 -> AJAX -> AJAX在ASP和其他语言中乱码的解决方法(JQuery中的AJAX也适用)

AJAX在ASP和其他语言中乱码的解决方法(JQuery中的AJAX也适用)

点击数:1027 发表时间:2010-06-29 17:03:33 作者: 来源链接:
分享到:
分享到微信
产生乱码主要有2个原因:
(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 的 $.post() 方法异步获取数据时,在服务端(asp)加上 Response.Charset="GB2312" ,返回显示正常,不过,在用 $.post() 方法提交数据时,服务端接收到的数据就变成了乱码(服务端加了 Response.Charset="GB2312" 也一样),根据以前(在用jQuery之前)的经验,我就用 Javascript 函数 escape() 将提交的数据进行了编码,这回情况好了一些,服务端接收到的数据变成了“xx%x%x%”。偶想了想,以前这种方法有效,应该是 ASP 的 Request() 方法会自动进行相应的解码。因此,如果我能在 ASP 下用 Javascript 的函数 unescape() 进行解码,问题应该就可以解决。于是,偶摆渡并苦钩了几圈,在网上发现了个不错的函数,一个用 ASP 实现的和 Javascript 下的 unescape() 函数有相同功能的函数,换句话说,是一个可以直接在 ASP 下直接解码用 Javascript 下的函数 escape() 编码的数据的函数。试了一试,果真有效。

     经测试,此方法也是比较完美的一种。

假设:提交的数据是 sendData = "偶是个懒虫" ,以下是偶的程序代码片断:

发送端:
sendData = escape("偶是个懒虫")
$.post(
   "saveData.asp"
   ,
   { sendData: sendData }
   function(data){
   alert(data);
   ...
   }
);

服务端:
<%
requestData = VBsUnEscape( Request.Form("sendData") )
Response.Write requestData
%>

前前后后都是“偶是个懒虫”,问题到此,又得到了一个相对完美的解决(虽说此方法,还是有些麻烦)!

以下给出 ASP 下的 escape() 函数和 unescape() 函数的具体实现方法:
<%
'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
差 劲
热门新闻
相关文章
上一篇: 使用Ajax时的十个常犯的错误
下一篇: ajax无缓存实时更新内容
评论区
匿名

返回首页 | 收藏本页 | 回到顶部
Copyright 2010. 米兰百分百 Powered By Bridge.
京ICP备15050557号