php的漢字字符串經(jīng)過json編碼后依舊顯示漢字

在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);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容