ajax中与PHP json_encode中全为gb2312乱码最终解决方案

95 篇文章 0 订阅
62 篇文章 0 订阅
ajax中与PHP json_encode中全为gb2312乱码最终解决方案
先说一下我的情况:
1,HTML是GBK,JS是写在HTML里,PHP也是GBK2312,php的header头和html的头部都指名了gb2312,当然文档也全是

gb2312,这样还是一样的乱码。
2,情况分析。
测试半天,如果在php里不用json_encode的话,用print_r或var_dump都正常不乱码,就是用json_encode才乱码。这是

因为json_encode转换时只认utf-8的。知道问题出在哪,就有办法解决的了!
3,解决方法
既然问题出在PHP这边,那我们的PHP文档都是GB2312的,这样只好在使用json_encode前把我们的数组GBK全转换成UTF

-8的咯。转换后就不乱了,这样我们再把返回的头设置成GB2312即可了!


贴一下我的代码:

PHP代码如下:

  1. <?php

  2.         //我是拿ecshop测试
  3.         $con = mysql_connect("localhost","root","") or die("数据库链接出错 ,错误信息:").mysql_errno();
  4.         mysql_query("set names gb2312");
  5.         mysql_select_db("ecshop");
  6.         $res = mysql_query("select goods_name,goods_sn,goods_id from ecs_goods limit 10");
  7.         while ($row = mysql_fetch_array($res)){
  8.                 $rs[]=$row;
  9.                 }

  10.         foreach($rs as $ke=>$val){
  11.                 $rs[$ke]['goods_name'] = iconv('gb2312','utf-8',$val['goods_name']);
  12.         }
  13.         header("Content-Type: text/html; charset=gb2312");
  14.         echo  json_encode($rs);
  15. ?>
复制代码




HTML代码是空的,只有一个JS代码
JS如下:

  1. <script type="text/javascript" >
  2. var xhr = CreatXHR();
  3. xhr.open("get","http://127.0.0.1/test.php?"+Math.random(),true);
  4. xhr.onreadystatechange = function(){
  5.         if(xhr.readyState ==4 && (xhr.status ==200 || xhr.status ==0)){
  6.                 var text = eval("["+xhr.responseText+"]");
  7.                 for(var i=0;i<text[0].length;i++){
  8.                         alert(text[0][i].goods_name)
  9.                 }
  10.                 //console.dir(text)
  11.                 }
  12.         }
  13. xhr.send();

  14.         function CreatXHR(){
  15.                 return window.XMLHttpRequest ? new XMLHttpRequest(): new ActiveXObject

  16. ("Microsoft.XMLHTTP");
  17.         
  18.         }
  19. </script>
复制代码


说明:
foreach($rs as $ke=>$val){
        $rs[$ke]['goods_name'] = iconv('gb2312','utf-8',$val['goods_name']);
}
这句就是把当前的数组中的有中文字的字段从GB2312全转为utf-8
然后后面就再json_encode来转换就不会乱码了!

全部代码如上,发下贴子,留着以后自己看看,也希望能帮到新人!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值