1. 程式人生 > >php json_encode() 輸出亂碼問題

php json_encode() 輸出亂碼問題

param 回來 false enc abc keys code 編碼 class

{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}

數組中所有中文在json_encode之後都不見了或者出現\u2353等。

解決方法是用urlencode()函數處理以下,在json_encode之前,把所有數組內所有內容都用urlencode()處理一下,然用json_encode()轉換成json字符串,最後再用urldecode()將編碼過的中文轉回來。

<?php
/**************************************************************
 *
 * 使用特定function對數組中所有元素做處理
 * @param string &$array  要處理的字符串
 * @param string $function 要執行的函數
 * @return boolean $apply_to_keys_also  是否也應用到key上
 * @access public
 *
 *************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
 static $recursive_counter = ;
 if (++$recursive_counter > ) {
  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--;
}
/**************************************************************
 *
 * 將數組轉換為JSON字符串(兼容中文)
 * @param array $array  要轉換的數組
 * @return string  轉換得到的json字符串
 * @access public
 *
 *************************************************************/
function JSON($array) {
 arrayRecursive($array, ‘urlencode‘, true);
 $json = json_encode($array);
 return urldecode($json);
}
$array = array
  (
   ‘Name‘=>‘希亞‘,
   ‘Age‘=>
  );
echo JSON($array);
?>

這樣中文就能正常輸出了

php json_encode() 輸出亂碼問題