zoukankan      html  css  js  c++  java
  • json中文编码问题

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

    {"group":{"name":"2016u8ba4u8bc1u65b0u5ba2u6237"}}

    的格式 但是这样并不能被用户读懂解析 所以 查找资料后用了 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认证新客户"}}
  • 相关阅读:
    最近的题越来越难了,卧槽,搞一上午一题不会,题解也看不懂
    hdu 4630 树状数组 ****
    hdu 3473 划分树 ***
    hdu 3360 最小点覆盖 **
    hdu 1507 记录路径的二分匹配 **
    poj 3177 边双联通 **
    hdu 4612 边双联通 ***
    Elasticsearch聚合后分页深入详解
    redis 五种数据类型及其使用场景
    再有人问你分布式锁,这篇文章扔给他
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/5649460.html
Copyright © 2011-2022 走看看