美文网首页
php的汉字字符串经过json编码后依旧显示汉字

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

作者: 封不然 | 来源:发表于2016-07-23 14:49 被阅读67次

    在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编码后依旧显示汉字

          本文链接:https://www.haomeiwen.com/subject/hvkwjttx.html