PHP实现json_encode函数不转义中文

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉。

$arr = array( 'name' => 'net IT技术博客', 'url' => 'www.net',);

运行echo json_encode($arr);结果输出:{"name":"net IT\\u6280\\u672f\\u535a\\u5ba2","url":"www.net"}

如何禁用掉这种转义呢?

PHP5.4+版本(多加 JSON_UNESCAPED_UNICODE 参数即可):

json_encode($json, JSON_UNESCAPED_UNICODE);

同样上面的数组,结果输出:{"name":".net IT技术博客","url":"www.net"}

PHP5.3版本及以下:

**方法一:**

$arr['name'] = urlencode($arr['name']);echo urldecode(json_encode($arr));

同样上面的数组,结果输出:{"name":".net IT技术博客","url":"www.net"}

**方法二:**

function json_encode_new($input) {
    // 从 PHP 5.4.0 起, 增加了这个选项.
    if(defined('JSON_UNESCAPED_UNICODE')) {
        return json_encode($input, JSON_UNESCAPED_UNICODE);
    }

    if(is_string($input)) {
        $text = $input;
        $text = str_replace('\\', '\\\\', $text);
        $text = str_replace(
            array("\r", "\n", "\t", "\""),
            array('\r', '\n', '\t', '\\"'),
            $text);
        return '"' . $text . '"';
    } else if(is_array($input) || is_object($input)) {
        $arr = array();
        $is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
        foreach($input as $k=>$v) {
            if($is_obj) {
                $arr[] = json_encode_new($k) . ':' . json_encode_new($v);
            } else {
                $arr[] = json_encode_new($v);
            }
        }
        if($is_obj) {
            return '{' . join(',', $arr) . '}';
        } else {
            return '[' . join(',', $arr) . ']';
        }
    } else {
        return $input . '';
    }
}

调用echo json_encode_new($arr);

结果输出:{"name":"net IT技术博客","url":"www.net"}。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值