PHP输出json数据时中文不进行unicode编码的几种方法总结

在PHP开发APP接口时,遇到JSON中文被unicode编码的问题。总结了解决方案:一是利用json_encode的JSON_UNESCAPED_UNICODE参数,但不适用于数组;二是先对中文进行urlencode,再json_encode,最后urldecode。尽管第二种方法绕了一圈,但在实际使用中能够直接在APP中解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用PHP开发APP接口时遇到一个问题,在与APP对接时,需要将从数据库或缓存中获取的数据转换成json,在做json_encode的时候,中文会被unicode编码,但是不希望中文进行编码。
json原样输出中文形式如下:

{
    "code":"200",
    "message":"success",
    "data":[
        { 
        "id":"1",
        "content":"\u6709\u4eba@\u4f60"
         }
    ] 
}

希望结果是:

{
    "code": "200", 
    "message": "success", 
    "data": [
        {
            "id": "70", 
            "content": "中文测试", 
        }
    ]
}

总结出以下几种方法:

方法一

php5.4以后使用了json_encode的JSON_UNESCAPED_UNICODE参数可以实现对字符不做escape和unicode处理
使用方法如下:

$str = "中文测试";
json_encode($str,JSON_UNESCAPED_UNICODE);

但是经过测试后,发现不能对数组进行操作,如

$arr = array('id'=>'1','content1'=>'中文测试1','content2'=>'中文测试2');
json_encode($arr,JSON_UNESCAPED_UNICODE);

上面这种形式似乎不起作用,故采用了第二种方法

方法二

先对需要处理的做urlencode处理,然后json_encode,最后做urldecode处理 ,使用方法如下:

/** 
 *  使用url_encode()对字符串进行编码
 *  @param string/array $str 需要编码的数据
 *  @return string/array $str 返回编码后的字符串
 */  
function url_encode($str) {  
    if(is_array($str)) {  
        foreach($str as $key=>$value) {  
            $str[urlencode($key)] = url_encode($value);  
        }  
    } else {  
        $str = urlencode($str);  
    }  

    return $str;  
}  

/**
* 输出json数据,不解析中文
* @param string/array $str 需要进行json编码的数据
* @return string  输出json数据
*/
function encode_json($str) {  
    $result = urldecode(json_encode(url_encode($str)));  
    return $result; 
}  

折腾好久之后,发现使用json_encode()直接输出的数据能直接在APP中直接使用,需要输出的json数据在客户端开发的控制台不解析,在客户端输出后可自动解析,不过也得到了不错的经验,希望继续学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值