AJAX中文乱码PHP中完美解决方法

2016-02-19 10:15 3 1 收藏

今天图老师小编给大家精心推荐个AJAX中文乱码PHP中完美解决方法教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

【 tulaoshi.com - Web开发 】

最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助。

众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找到符合自己理想的答案,我今天就是在网上找了很多,但是都差不多,讲ASP和JSP的比较多(我是用的PHP),所以到最后都没找到自己满意的答案。

AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时(xmlhttp.open(“getpost”,url,true)),服务器端接收到的为乱码,这个也是我今天遇到的问题,没做处理之前,在IE里是正常的,但是在Firefox里面就出现了乱码,我先把接收到参数输出到一个文本里,没有发现什么问题,郁闷了,然后我就把查询语句在输出来观察(我这里是要从数据库里查出与参数相关的东西),终于发现问题,IE和Firefox输出的参数不一样,虽然汉字上都一样,但是和前后连接上有细小的区别,于是认定了是编码问题,在网上查找了相关资料,都没能解决问题,但是得到一些启示,因为AJAX发送数据都是采用UTF-8编码的方式发送的,所以要在服务器端进行编码转换(我这里页面是采用GB2312编码的,如果是采用UTF-8的话应该不会有这步的问题),所以我在服务器端进行了UTF-8转GB2312,

$str=iconv("UTF-8","GB2312",$str);

然后测试,在Firefox上顺利解决了问题,以为大公告成了,可是再到IE下测试,发现IE又出现了问题,服务器端接收到的参数没值,这下就郁闷了,突然看到发送头设置了setRequestHeader("Content-Type","application/x-www-form-urlencoded");,就找到问题所在了,然后就在发送那里进行了参数编码:
代码如下:

geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //两次也可以写成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open("GET",geturl,true);

然后再到服务器端进行URL解码:
代码如下:

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

注意:解码必须在编码转换前面,不然得不到正确值
保存测试,IE和Firefox都能正常了。
第二种就是服务器端向客户端输出中文时出现乱码,这类问题网上的答案就比较多了,也都能解决,为了避免各位再去查找,我在这里就COPY下J
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。

解决办法:

在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");

来源:https://www.tulaoshi.com/n/20160219/1593964.html

延伸阅读
标签: Web开发
因AJAX接受数据时服务器默认是采用UTF-8的编码形式进行传送,所以在很多GB2312中文网页中应用AJAX回传数据经常会发生中文乱码。 解决AJAX中文回传乱码,其实就是将在服务器端文件加一个HEADER,指明送出的是什么编码流。比如 ASP文档就是在头部增加一行说明: Response.Charset("GB2312") PHP的示例如下: header('Content-T...
标签: Web开发
jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCharacterEncoding("GB2312"); response.setCharacterEncoding("GB2312"); jsp乱码问题在jsp里面就把 %@ page contentType="text/html; charset=gb2312" language="java" import="jav...
标签: Web开发
今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。 当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用javascript中的escape函数。 使用GET方式提交数据的时候,中文问题很好解决,setrequestheader("Content-Type...
标签: Web开发
上网找了一些资源,才弄明白这是编码的问题,我的服务器端发送过来的数据是GB2312编码的,而AJAX把接收到的数据都当成UTF-8编码的。 网上的很多解决方法都是服务器端基于PHP、JSP等的,要改变这些的编码方式都比较简单。但是我的服务器端是用了C编写的CGI程序,用于嵌入式系统中的,所有的输出都是用了printf。 最后找到一个在linux下的头文...
标签: Web开发
加上设置字符编码的方法: response.setHeader("charset","gb2312"); ******************************************** 看到的说明原文如下: 用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出...

经验教程

450

收藏

54
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部