php中数组转json时汉字如何不变成unicode编码保留汉字,json_encode不转义中文汉字的方法...

本文介绍了如何在PHP中处理json_encode后出现的汉字Unicode转义问题。针对PHP版本5.4及以上和低于5.4的情况,分别提供了使用JSON_UNESCAPED_UNICODE参数和自定义函数的解决方案,确保汉字不被转义。
摘要由CSDN通过智能技术生成

摘要:最近在开发接口,用的是json格式,但是json_encode后出现了类似"\u5c0f\u8c61" 的unicode字符。

那么如何才能使json_encode不转义汉字呢?

方法1

如果你的php版本是5.4+, 那么恭喜你,一个参数JSON_UNESCAPED_UNICODE就能搞定...

最近在开发接口,用的是json格式,但是json_encode后出现了类似"\u5c0f\u8c61" 的unicode字符。

那么如何才能使json_encode不转义汉字呢?

方法1

如果你的php版本是5.4+, 那么恭喜你,一个参数JSON_UNESCAPED_UNICODE就能搞定,如:

$arr = array('name'=>'张三','sex'=>'男','address'=>array('中国','河北','邯郸',array('邯郸','邯郸学院')));

echo json_encode($arr, JSON_UNESCAPED_UNICODE);

方法2

如果不幸由于种种原因你的php无法升到高版本,那么就要自定义函数了:

首先我在网上找了好多方法,思路是先把字段中的中文urlencode, 在json_encode后将得到的字串整体urldecode,网上提供的解决方法是这样的:

foreach($array as $key => $value){

$jsonstr[$key] = urlencode($value);

}

$jsonstr = urldecode(json_encode($jsonstr));

这种方法很巧妙,但是只能对于一维数组管用,如果数组是多维的,就不能用了,于是我经过多次测试,写出了一个兼容多维数组的方法:$arr = array('name'=>'张三','sex'=>'男','address'=>array('中国','河北','邯郸',array('邯郸','邯郸学院')));

function my_json_encode($array){

if(version_compare(PHP_VERSION,'5.4.0','

foreach($array as $key => $value){

if(!is_array($value)){

$jsonstr[$key] = urlencode($value);

}else{

$jsonstr[$key] = urlencode(my_json_encode($value));

}

}

$jsonstr = urldecode(json_encode($jsonstr));

$jsonstr = str_replace(']"', ']', str_replace('"[', '[', $jsonstr));

}else{

$jsonstr = json_encode($array, JSON_UNESCAPED_UNICODE);  //必须PHP5.4+

}

return $jsonstr;

}

$jsonstr = my_json_encode($arr);

var_dump($jsonstr);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值