最佳PHP json_encode将中文编码为UTF8的解决方法

转自:http://www.liaoxiaoqi.com/?p=451

注意,这里说的都是基于文本均为utf8格式的前提下,如果不是的话需要先进行转换。

在用PHP提供的json_encode进行转换时,如果遇到中文,就会被直接转换为utf8编码,形如“\u34ab\u9234\u43c1”,网上有人介绍的使用正则替换的方法来解决这个问题,如下:

1. functionencode($code)
2. {
3. $code= json_encode($code);
4. returnpreg_replace("#\\\u([0-9a-f]+)#ie","iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))",$code);
5. }
function decode($code) { return json_decode($code);}

但是此方法在一些服务器环境,如Linux+Lighttpd等情况下,可能出现无法转换而导致乱码的情况。经过摸索,现提供比较具有通用性的做法是,先将要转换的数组或对象中的中文进行urlencode编码,在完成json转换后,再进行urldecode解码。具体如下:

01. functionmyjson($code)
02. {
03. $code= json_encode(urlencodeAry($code));
04. returnurldecode($code);
05. }
06.
07. functionurlencodeAry($data)
08. {
09. if(is_array($data))
10. {
11. foreach($dataas$key=>$val)
12. {
13. $data[$key] = urlencodeAry($val);
14. }
15. return$data;
16. }
17. else
18. {
19. returnurlencode($data);
20. }
21. }

补充:

PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,可使用类似的方法进行编解码。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值