解决php处理array转化为json时中文编码错乱问题

在做接口请求的时候,用得比较多的是json格式,我们往往需要把提交是数据转化为json格式,用json_encode可以直接转化,但是有一个问题就是,直接转化后的中文也发生了变化,变为“\xxx\xxxx\xxx”这样的格式,在接口获取数据的时候就判断不对了。那么就要利用json_encode进行参数处理,让json更懂中文(JSON_UNESCAPED_UNICODE),保存中文的格式:

function JsonEncode($array) 
{  
if(version_compare(PHP_VERSION,'5.4.0','<')){ 
 $str = json_encode($array); 
 $str = preg_replace_callback("#\\\u([0-9a-f]{4})#i",function($matchs)
{ 
 return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));  },$str); 
 return $str; 
 }else{
  return json_encode($array, JSON_UNESCAPED_UNICODE); 
 } 
}
这样既做到了低版本对JSON_UNESCAPED_UNICODE的兼容,也对转化的array保留中文不乱。


调用方式很简单:

$kf_account =trim($this->data['account']).'@xxxx168'; 
$nickname =trim($this->data['nickname']);

$data = array("account"=>$kf_account,"nickname"=>$nickname);
 $json_data =JsonEncode($data);
然后我们可以进行相应的CURL操作了。


评论/留言