PHP使用json_encode()时数组里的中文字符串不转义

前言

在项目开发过程中,经常遇到入库之前要对数组数据进行 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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值