json_encode中文unicode的问题

近期做微信卡券开发遇到一个问题,创建卡券post数据给服务器时返回 data format error, do NOT use json unicode encode (\uxxxx\uxxxx), please use utf8 encoded text!。这就奇怪了,代码中一直用的是UTF-8,怎么就跟unicode搭上关系了呢。一通搜索后发现,用PHP的 json_encode 来处理中文的时候,中文都会被编码,变成不可读的, 类似”\u***”的格式,微信服务器端不能接受。

$a = array('str1' => '中文', 'str2' => 'english');                                  
var_dump(json_encode($a));  

//string(40) "{"str1":"\u4e2d\u6587","str2":"english"}"

解决方法如下:

法一:

把汉字先 urlencode 然后再使用json_encode,json_encode之后再次使用urldecode 来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了。

$a = array('str1' => urlencode('中文'), 'str2' => 'english');                       
var_dump(urldecode(json_encode($a))); 

//string(34) "{"str1":"中文","str2":"english"}"

如果是多维数组就用一个递归函数

function get_array($arrResult,$arr=array()){
foreach($arrResult as $key=>$value){
if (is_array($value)){
$arr[$key]=get_array($value);
}else {
//echo $arrResult[$key]."gg";
$arr[$key]=urlencode($value); 
// echo $key;
}
}
return $arr;
}
//$menuarr是一个多维数组
 $post=urldecode (json_encode(get_array($menuarr)));

法二:

PHP 5.4中对json_encode对options可选参数增加 JSON_UNESCAPED_UNICODE常量,即不编码为unicode

$a = array('str1' => '中文', 'str2' => 'english');   
var_dump(json_encode($a, JSON_UNESCAPED_UNICODE));

//string(34) "{"str1":"中文","str2":"english"}"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值