PHP JSON中文

    在 php 中使用 json_encode() 內置函數(php > 5.2)可以使用得 php 中數據可以與其它語言很好的傳遞並且使用它。

這個函數的功能是將數值轉換成json數據存儲格式。

[php] 
<?php 
$arr = array 
       ( 
          'Name'=>'希亞', 
          'Age'=>20 
       ); 
 
$jsonencode = json_encode($arr); 
echo $jsonencode; 
?> 

程式運行結果如下:

[php] 
{"Name":null,"Age":20} 

        json_encode 函數中中文被編碼成 null 瞭,Google 瞭一下,很簡單,為瞭與前端緊密結合,Json 隻支持 utf-8 編碼,我認為是前端的 Javascript 也是 utf-8 的原因。
[php]
<?php 
$array = array 
    ( 
        'title'=>iconv('gb2312','utf-8','這裡是中文標題'), 
        'body'=>'abcd…' 
    ); 
 
echo json_encode($array); 
?> 

     這個程式的運行結果為:

[php] 
{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd…"} 
      數組中所有中文在json_encode之後都不見瞭或者出現\u2353等。

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

[php] 
<?php 
/**************************************************************
 *   www.2cto.com
 *  使用特定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 = 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–; 

  
/**************************************************************
 *
 *  將數組轉換為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'=>20 
       ); 
 
 
echo JSON($array); 
?> 

     這次成功瞭,運行結果如下:
[php] view plaincopy
{"Name":"希亞","Age":"20"} 
作者:wolinxuebin

You May Also Like