前言
在项目开发过程中,经常遇到入库之前要对数组数据进行 json_encode() 操作,然后使用数据库工具查看相关数据时,发现对应的json数据中本来是中文字符串的数据变为了 Unicode 字符串,给查看数据带来了不便。那么如果我希望对数据使用了json_encode()处理以后,里面的中文字符串不变化可以如何做呢?
在 PHP5.4 版本以后,官方更新了 json_encode() 的特性——若希望经过json_encode()处理后的中文字符串不变为乱码,可以设置函数的第二个参数为——JSON_UNESCAPED_UNICODE 。
echo json_encode($arrData, JSON_UNESCAPED_UNICODE);
但是这个新特性只能在 PHP5.4 版本及以上版本使用,对于5.4以下的版本我们可以通过自定义函数来处理。
以下代码测试环境:
PHP 版本: 5.4.0及以上版本
<?php
/**
* 使用 json_encode() 处理数组时,
* 不对数组里面的中文字串进行转义
*
* @param array $arr 待处理数组
* @return string Json格式的字符串
*/
function toJson($arr) {
$ajax = ToUrlencode($arr);
$str_json = json_encode($ajax);
return urldecode($str_json);
}
/**
* 将数组里面key字串和value字串用urlencode转换格式后返回
*
* @param array $arr 数组
* @return array
*/
function ToUrlencode($arr) {
$temp = array();
if (is_array($arr)) {
foreach ($arr AS $key => $row) {
//若key为中文,也需要进行urlencode处理
$key = urlencode($key);
if (is_array($row)) {
$temp[$key] = ToUrlencode($row);
} else {
$temp[$key] = urlencode($row);
}
}
} else {
$temp = $arr;
}
return $temp;
}
/***************************************************************
* 测试代码
****************************************************************/
$test = array(
'a'=>array(
'中文1'=>'我是测试5',
'中文2'=>'我是测试13',
),
'b'=>'我是测试1',
'c'=>'我是测试2',
'中文'=>'我是测试3',
);
var_dump(toJson($test));
var_dump(json_encode($test, JSON_UNESCAPED_UNICODE));
输出结果:
string(125) "{"a":{"中文1":"我是测试5","中文2":"我是测试13"},"b":"我是测试1","c":"我是测试2","中文":"我是测试3"}"
string(125) "{"a":{"中文1":"我是测试5","中文2":"我是测试13"},"b":"我是测试1","c":"我是测试2","中文":"我是测试3"}"
欢迎大家一起交流讨论,共同进步。
参考链接:
https://www.php.net/json_encode/
https://blog.csdn.net/qq_24613517/article/details/81062236
https://blog.csdn.net/a447180126/article/details/17464093