WD1X.COM - 问答一下,轻松解决,电脑应用解决专家
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win11Linux
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascript服务器
PHP教程CSS教程XML教程

$.Ajax()传输中文的乱码问题及解决办法IE/Chrome/Oprea下兼容

更新时间:2012-09-08 23:04 作者:佚名点击:

在使用Ajax进行传输包含中文内容时很容易产生乱码问题。网上有很大师进行了细致的分析并做出了解决。但看起来理论性比较强。

我最开始想到的是HTML5下的

 <meta charset=gb2312>
标签,所以果断加了一个

 <meta charset=gb2312>
。很快就不乱码了。由于我喜欢用Chrome,后还想在Oprea上看一下效果,乖乖,还是乱码。用IE9同样是乱码。凌乱了,这下。

后来在PHP100看到有人解决了,在提交页加了这句:

 header('Content-Type:text/html;charset=GB2312');
加了这句之后,三个浏览器显示都正常了。

事情到了这一步似乎就可以划上句号了,但但仅仅是这样的话就没有必要写这篇文章。因为仅通过上面那条语句是远远不够的,稍加分析可以知道,我上面那句话是加在请求页面上,也就是说在从服务器返回过来的信息是转码了的。但如果是从客户端发送过去的是中文,那还是乱码。也就是说,服务器接收到的信息是乱码的。这就需要在将中文字符发送到服务器之前进行转码。

 

\
 

当填入中文信息时,返回的是乱码,而提交页输出的信息则正常

 

\
 

查了大半天jQuery手册,还是不理解。PHP100.COM提供的方法是发送前加入以下两行代码进行编码
 

geturl=encodeURI(geturl);  
geturl=encodeURI(geturl);

然后再到被请求页面(也就是服务器端)去解码,如下:

$str=urldecode($str); //解码  
$ str =iconv("UTF-8","GB2312",$ str);//转码

感觉这样一来一去有些麻烦,查$jQuery手册时看到

 

\
 

Ajax发送数据格式是以UTF-8的格式发送,所以服务器端接收到的数据就是已经是UTF-8格式了,而被请求页又用的是GB2312的编码格式,所以返回的数据必然是原网页部分中文正常,而接收到的中文部分则乱码。

 

\
 

所以现在的解决办法已经很明朗了,即只需将被请求页的编码格式改为UTF-8,再将原网页中的内容转码为UTF-8;或者被请求页继续使用GB2312的编码格式,将接收到的数据进行转码。

 mb_convert_encoding($str,"ToEncode","EncodeFrom");

$str是要转换的字符,ToEncode是所要转成的编码格式,EncodeFrom是要转字符的格式。

最终Chrome/IE9/Oprea全部兼容了

 

\
 

如果转码为GB2312,输入繁体中文仍然会乱码,此时只需转码为GBK编码.

顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容