在使用Ajax进行传输包含中文内容时很容易产生乱码问题。网上有很大师进行了细致的分析并做出了解决。但看起来理论性比较强。 我最开始想到的是HTML5下的
<meta charset=gb2312>
<meta charset=gb2312> 后来在PHP100看到有人解决了,在提交页加了这句:
header('Content-Type:text/html;charset=GB2312'); 事情到了这一步似乎就可以划上句号了,但但仅仅是这样的话就没有必要写这篇文章。因为仅通过上面那条语句是远远不够的,稍加分析可以知道,我上面那句话是加在请求页面上,也就是说在从服务器返回过来的信息是转码了的。但如果是从客户端发送过去的是中文,那还是乱码。也就是说,服务器接收到的信息是乱码的。这就需要在将中文字符发送到服务器之前进行转码。
当填入中文信息时,返回的是乱码,而提交页输出的信息则正常
查了大半天jQuery手册,还是不理解。PHP100.COM提供的方法是发送前加入以下两行代码进行编码
geturl=encodeURI(geturl); 然后再到被请求页面(也就是服务器端)去解码,如下:
$str=urldecode($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编码. |