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"}"
發佈了4 篇原創文章 · 獲贊 4 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章