首頁 >後端開發 >php教程 >php中json_encode不支援GB2312編碼的解決

php中json_encode不支援GB2312編碼的解決

黄舟
黄舟原創
2017-11-15 15:51:072428瀏覽

在之前的文章中我們介紹了php中json_encode中文UNICODE轉碼的問題解決,那麼今天繼續給大家介紹php中json_encode不支援GB2312編碼的問題、在php 中使用json_encode() 內建函數(php > 5.2)可以使用得php 中資料可以與其它語言很好的傳遞並且使用它,這個函數的功能是將數值轉換成json資料儲存格式。

如下:

$arr = array('Name'=>'希亚', 'Age'=>20); 
$jsonencode = json_encode($arr); 
echo $jsonencode;

運行結果:

{"Name":null,"Age":20}

json_encode 函數中中文被編碼成null 了,Google 了一下,很簡單,為了與前端緊密結合,Json 只支援utf-8 編碼,我認為是前端的Javascript 也是utf-8 的原因。解決方案如下:

$array = array (     
'title'=>iconv('gb2312','utf-8','这里是中文标题'),     
'body'=>'abcd...' );  
echo json_encode($array);

運行結果:

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

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

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

一個範例程式如下:

/************************************************************** 
 * 
 *    使用特定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中json_encode中文UNICODE轉碼的問題,相信小夥伴在遇到相同的問題可以輕鬆的解決了!

相關推薦:

#php中關於json_encode()函數的詳解

php中json_encode中文UNICODE轉碼的問題解決


php中json_encode的使用範例介紹

以上是php中json_encode不支援GB2312編碼的解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn