搜索
首页php教程php手册PHP5.4中json_encode中文转码的变化[让json更懂中文]

在php5.4以前做json_encode的时候中文会被unicode编码,中文都会被编码, 变成不可读的, 类似“\u***”的格式, 还会在一定程度上增加传输的数据量。

 

例如:

 

$str = '中文';

echo json_encode($str);

//"\u4e2d\u6587"

 

php5.4开始

echo json_encode($str, JSON_UNESCAPED_UNICODE);  

//"中文"

php5.4让json更懂中文!

 

5.4之前不进行unicode转码,有3种方法处理:

 

PHP5.4中json_encode中文转码的变化让json更懂中文

 

但其实前两种方式是会导致问题,在一些特殊的情况下。如下例:

 

function myjson($code) {

    $code = json_encode(urlencodeAry($code));

    return urldecode($code);

}

 

function urlencodeAry($data) {

    if(is_array($data)) {

        foreach($data as $key=>$val) {

            $data[$key] = urlencodeAry($val);

        }

        return $data;

    } else {

        return urlencode($data);

    }

}

 

$test = array (

    0 => '"大连周水子机场"→人民路',

    1 => '运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车',

);

 

/*

通过常规则的json_encode|json_decode来编解码

["\"\u5927\u8fde\u5468\u6c34\u5b50\u673a\u573a\"\u2192\u4eba\u6c11\u8def","\u8fd0\u8425\u65f6

\u95f4\uff1a5\uff1a10\uff5e21\uff1a00 \u7968\u4ef7\uff1a16\u5143 \u53d1\u8f66\u95f4\u969420

\u5206\u949f\u4e00\u73ed\uff0c\u5ba2\u6ee1\u968f\u65f6\u53d1\u8f66"]

array (

  0 => '"大连周水子机场"→人民路',

  1 => '运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车',

)

*/

$test1 = json_encode($test);

$test2 = json_decode($test1, TRUE);

echo $test1;

echo PHP_EOL;

var_export($test2);

echo PHP_EOL;

 

/*

通过myjson|json_decode来编解码,但是会出报错json_last_error返回(JSON_ERROR_SYNTAX === 4),

因为""大连周水子机场"→人民路"

[""大连周水子机场"→人民路","运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车"]

NULL

*/

$test1_1 = myjson($test);

$test2_1 = json_decode($test1_1, TRUE);

echo $test1_1;

echo PHP_EOL;

var_export($test2_1);

echo PHP_EOL;

 

/*

通过json_enco+pack|json_decode来编解码,保证不会对中文编码,但是会缺少运营时间数据和票价

["\"大连周水子机场\"→人民路","运营时间::~: 票价:元 发车间隔分钟一班,客满随时发车"]

array ( www.2cto.com

  0 => '"大连周水子机场"→人民路',

  1 => '运营时间::~: 票价:元 发车间隔分钟一班,客满随时发车',

)

*/

function replaceUni($str) {

    return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $str);

}

$test1_2 = replaceUni(json_encode($test));

$test2_2 = json_decode($test1_2, TRUE);

echo $test1_2;

echo PHP_EOL;

var_export($test2_2);

echo PHP_EOL;

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能