免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2021 | 回复: 0
打印 上一主题 下一主题

php中json_encode中文编码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-13 19:43 |只看该作者 |倒序浏览
php中json_encode中文编码问题

  现象:众所周知使用json_encode可以方便快捷地将对象进行json编码,但是如果对象的属性中存在着中文,问题也就随之而来了。json_encode会将中文转换为unicode编码,例如:'胥'经过json_encode处理后变为'\u80e5',最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。

  我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!

测试代码如下:


  1. 1 <?php
  2. 2 class myClass {
  3. 3     public $item1 = 1;
  4. 4     public $item2 = '中文';
  5. 5      
  6. 6     function to_json() {
  7. 7         //url编码,避免json_encode将中文转为unicode
  8. 8         $this->item2 = urlencode($this->item2);
  9. 9         $str_json = json_encode($this);
  10. 10         //url解码,转完json后将各属性返回,确保对象属性不变
  11. 11         $this->item2 = urldecode($this->item2);
  12. 12         return urldecode($str_json);
  13. 13     }
  14. 14 }
  15. 15
  16. 16 $c = new myClass();
  17. 17 echo json_encode($c);
  18. 18 echo '<br/>';
  19. 19 echo $c->to_json();
  20. 20 echo '<br/>';
  21. 21 echo json_encode($c);
  22. 22 echo '<br/>';
  23. 23 echo json_encode('胥');
  24. 24 ?>
复制代码
程序输出结果:

{"item1":1,"item2":"\u4e2d\u6587"}{"item1":1,"item2":"中文"}{"item1":1,"item2":"\u4e2d\u6587"}"\u80e5"

希望本文起到抛砖引玉的作用,收集大家更好的解决方法……!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP