PHP5.4后的JSON更懂中文

程序人生
PHP5.4之前的版本中,json_encode函数在转换JSON时会把中文进行编码,变成不可读类似“\u***”的格式,这在一定程度上会增加网络传输的数据量。
<?php
echo json_encode('岁月轻狂');

//"\u5c81\u6708\u8f7b\u72c2"
这让我们在处理中文时很是麻烦,很多时候都需要自己来重写json_encode。
PHP5.4之后的版本(包括5.4)新增了一个参数:JSON_UNESCAPED_UNICODE;
此参数故名思议: JSON不要编码Unicode,可保证在json_encode时中文不会被编码。
<?php
echo json_encode('岁月轻狂', JSON_UNESCAPED_UNICODE);

//"岁月轻狂"
json_encode函数还有几个不经常用到的常量参数:
● JSON_HEX_TAG      [所有的 < 和 > 转换成 \u003C 和 \u003E] PHP5.3
● JSON_HEX_AMP      [所有的 & 转换成 \u0026] PHP5.3
● JSON_HEX_APOS     [所有的 ' 转换成 \u0027] PHP5.3
● JSON_HEX_QUOT     [所有的 " 转换成 \u0022] PHP5.3
● JSON_FORCE_OBJECT [使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用] PHP5.3
● JSON_NUMERIC_CHECK        [将所有数字字符串编码成数字(numbers)] PHP5.3.3
● JSON_BIGINT_AS_STRING     [将大数字编码成原始字符原来的值] PHP5.4
● JSON_PRETTY_PRINT         [用空白字符格式化返回的数据] PHP5.4
● JSON_UNESCAPED_SLASHES    [不要编码 /] PHP5.4
● JSON_UNESCAPED_UNICODE    [不对unicode字符进行编码(默认是编码成 \uXXXX)] PHP5.4

对于PHP5.4之前的版本,我们可用以下方法来对json_encode进行重构:
<?php
/**
 * JSON 编码
 * @param $value 待编码的value,除了resource类型之外,可以为任何数据类型,只接受UTF-8编码的数据
 * @return type
 */
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);
    }
}


Tags: PHP JSON
  • 还没有评论,沙发等你来抢
*         

正在加载验证码......