json中文编码问题

在和微信接口交互的过程中需要传参json而里面有中文的存在,所以json_encode($data)编码后会形成

{"group":{"name":"2016\u8ba4\u8bc1\u65b0\u5ba2\u6237"}}

的格式 但是这样并不能被用户读懂解析 所以 查找资料后用了 json_encode($data,JSON_UNESCAPED_UNICODE) 这样来处理就可以了,然而实际上在服务器上跑的时候还是遇到问题,JSON_UNESCAPED_UNICODE报错。

仔细查询 发现这个参数是PHP5.4以后才支持解析,而我们服务器php版本5.3只能自己写函数来解析一下

复制代码
<?php
/*
 * Add by lizhaoyao
 * Add at 2016-07-07 10:43
 * 由于 一般在PHP5.4中对json中中文转码直接用了json_encode($data,JSON_UNESCAPED_UNICODE)
 * 而 php5.3中 JSON_UNESCAPED_UNICODE 这个值是不存在的 所以要自己写一个兼容函数
 * 对变量进行 JSON 编码
 * @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据
 * @return string 返回 value 值的 JSON 形式
 * */
function json_encode_ex( $value)
{
    if ( version_compare( PHP_VERSION,'5.4.0','<'))
    {
        $str = json_encode( $value);
        $str =  preg_replace_callback(
            "#\\\u([0-9a-f]{4})#i",
            function( $matchs)
            {
                return  iconv('UCS-2BE', 'UTF-8',  pack('H4',  $matchs[1]));
            },
            $str
        );
        return  $str;
    }
    else
    {
        return json_encode( $value, JSON_UNESCAPED_UNICODE);
    }
}
?>
复制代码

然后用函数 json_encode_ex调用就好了

{"group":{"name":"2016认证新客户"}}

 

posted @   李照耀  阅读(17326)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示