php5.2的json_encode对中文字符的处理

json已经被广泛用于结构数据序列化并保存/传输的过程,php也提供了对json的很方便的原生支持,但是在php 5.2中,json_encode函数会将中文进行Unicode转义编码,比如以下程序:

<?php
/*php version 5.2*/
header("Content-type:text/html;charset=utf-8");
$arr = array(
                "name" => "蛙蛙",
                "age" => "10"
            );
$str = json_encode($arr);
echo($str);

会输出:

{"name":"\u86d9\u86d9","age":"10"}

最新的php 5.4中的json_encode已经增加了options参数,使用JSON_UNESCAPED_SLASHES即可不编码中文

string json_encode ( mixed $value [, int $options = 0 ] )

可是对于工程中已经使用着5.2版本的环境就无能为力

网上的方法多多少少都有问题,比如urlencode法不能保留多个空格,而且在编码复杂的树形结构时要手动进行递归遍历,读取程序也必须能支持urldecode才方便使用,而从网上搜到的正则替换法(#\\\u([0-9a-f]{+})#ie)对诸如"蛙1234"这样的字符串编码会出错(其实就是没有限制长度),下面是一种改进的做法,在生产环境中测试没有出现问题:

<?php
/*php version = 5.2*/
header("Content-type:text/html;charset=utf-8");
function wz_output($arr)
{
    $str = json_encode($arr);
    $search = "#\\\u([0-9a-f]{4})#ie";
    $replace = "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))";
    echo preg_replace($search, $replace, $str);
}
$arr = array(
                "name" => "蛙蛙",
                "age" => "10"
            );
wz_output($arr);

输出:

{"name":"蛙蛙","age":"10"}

转载于:https://www.cnblogs.com/intervention/p/4031827.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值