在php中,如果一段中文字符調(diào)用json_encode()函數(shù)后,會將中文字符串也轉(zhuǎn)換成我們難以識別的編碼,這對我們有的時候查看錯誤信息造成了麻煩。
例如:
$str='測試字符串';
echo json_encode($str)
所得的到的結(jié)果"\u6d4b\u8bd5\u5b57\u7b26\u4e32"是這樣的字符串,明顯這個并不是我們所想要的,在接口開發(fā)中經(jīng)常會有狀態(tài)碼以及狀態(tài)說明的返回,例如我們在接口中經(jīng)常會有寫
echo json_encode(array('resultCode'=>'00','resultDec'=>'成功'),'resultObj'=>array());
這樣的代碼段,如果想要看到resultDec這個鍵值所對應(yīng)的漢字,我們還需要再去將它轉(zhuǎn)換回來,這無疑對我們產(chǎn)生了麻煩,所以特寫了一下函數(shù)解決上述
問題:
function toJson($array)
{
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}
if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key]; unset($array[$key]);
}
}
}
$recursive_counter--;
}
之后再使用的時候,調(diào)用這個toJson()函數(shù)便可以解決這個問題,調(diào)用的demo如下:
$arr = array(
'resultCode' => '99',
'resultDec' => '一個錯誤導致失敗',
'resultObj' => array(
'result' => '就是想寫個字符串'
)
);
echo toJson($arr);