首页 > PHP > AJAX中文乱码PHP完美解决(IE和Firefox兼容)

AJAX中文乱码PHP完美解决(IE和Firefox兼容)

2009年05月09号
查看评论 发表评论 1,078次浏览

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

 

AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时(xmlhttp.open(“get|post”,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″);

类别PHP 标签
  1. kobe shoes
    发表于 2010年06月22号 09时17分11秒 | 1楼

    I love your imagination

  2. lebron james shoes
    发表于 2010年06月22号 09时26分27秒 | 2楼

    I like the series of stories, good idea.

  3. cheap ghd straighteners
    发表于 2010年06月22号 10时04分10秒 | 3楼

    Wonderful lanscape, and nice to see you

  4. mbt shoes sale
    发表于 2010年06月23号 10时06分12秒 | 4楼

    so creative

  5. ghd mk4 black styler
    发表于 2010年06月27号 00时35分13秒 | 5楼

    Wow, well done.

  6. versace handbags
    发表于 2010年06月28号 04时14分13秒 | 6楼

    Your story made me dream…thank u so much god bless you

  7. paul smith london
    发表于 2010年06月29号 01时39分17秒 | 7楼

    I’ve often wondered the same thing :)

  8. mbt lami
    发表于 2010年06月29号 15时37分39秒 | 8楼

    these stories are great!

  9. cheap lacoste shoes
    发表于 2010年06月30号 12时56分29秒 | 9楼

    individualiteit

  10. gucci replica handbags
    发表于 2010年07月01号 16时09分13秒 | 10楼

    Was an awesome event, Was great to look up

  11. marc jacobs handbag
    发表于 2010年07月09号 17时59分12秒 | 11楼

    It is fascinating to me how this article about.

  12. kobe bryant shoes
    发表于 2010年07月11号 02时10分12秒 | 12楼

    oh,how kind words.Like a balm to my heart…

  13. puma ferrari
    发表于 2010年07月19号 17时44分34秒 | 13楼

    You move me..

  14. mbt walking shoes
    发表于 2010年07月19号 19时30分10秒 | 14楼

    he he, thanks. I am waiting on your next post.

  15. MBT Lami Birch
    发表于 2010年07月22号 12时30分20秒 | 15楼

    These words seem particularly poignant for me today.

评论页数:
1 2 242
你必需 登陆 才能发表评论.