解决json_encode中文UNICODE转码问题

前段时间做东西时用到了 json,php 自带的 json_encode 会将 unicode 字符转码,以 \uxxxx 的形式输出,这样不方便调试,并且,不方便插入数据库(mysql 会自动去掉反斜杠,变成 uxxxx)。于是在网上找到了如下两种解决方案:

  1. JSON_UNESCAPED_UNICODE:
    该方法只适用于 php 5.4 及以上版本,使用方法:

    1
    2
    <?php
    echo json_encode("中文", JSON_UNESCAPED_UNICODE);
  2. 自己写 function 处理:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function ch_json_encode($data) {

    function ch_urlencode($data) {
    if (is_array($data) || is_object($data)) {
    foreach ($data as $k => $v) {
    if (is_scalar($v)) {
    if (is_array($data)) {
    $data[$k] = urlencode($v);
    } else if (is_object($data)) {
    $data->$k = urlencode($v);
    }
    } else if (is_array($data)) {
    $data[$k] = ch_urlencode($v); //递归调用该函数
    } else if (is_object($data)) {
    $data->$k = ch_urlencode($v);
    }
    }
    }
    return $data;
    }

    $ret = ch_urlencode($data);
    $ret = json_encode($ret);
    return urldecode($ret);
    }

个人觉得第二种方法有 bug,以前有过输出 \’ 的经历。

参考 http://blog.csdn.net/lanqiao825/article/details/26700809http://blog.sina.com.cn/s/blog_6ad6243801016zqo.html