在php中,如果一段中文字符调用json_encode()函数后,会将中文字符串也转换成我们难以识别的编码,这对我们有的时候查看错误信息造成了麻烦。
例如:
$str='测试字符串';
echo json_encode($str)
所得的到的结果"\u6d4b\u8bd5\u5b57\u7b26\u4e32"是这样的字符串,明显这个并不是我们所想要的,在接口开发中经常会有状态码以及状态说明的返回,例如我们在接口中经常会有写
echo json_encode(array('resultCode'=>'00','resultDec'=>'成功'),'resultObj'=>array());
这样的代码段,如果想要看到resultDec这个键值所对应的汉字,我们还需要再去将它转换回来,这无疑对我们产生了麻烦,所以特写了一下函数解决上述
问题:
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--;
}
之后再使用的时候,调用这个toJson()函数便可以解决这个问题,调用的demo如下:
$arr = array(
'resultCode' => '99',
'resultDec' => '一个错误导致失败',
'resultObj' => array(
'result' => '就是想写个字符串'
)
);
echo toJson($arr);