php的汉字字符串经过json编码后依旧显示汉字

在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);
php的汉字字符串经过json编码后依旧显示汉字_第1张图片
我的公众号

你可能感兴趣的:(php的汉字字符串经过json编码后依旧显示汉字)