php json中文編碼為null的解決辦法
今天使用json_encode函數(shù),發(fā)現(xiàn)中文竟成了null。
原因分析:使用json_encode函數(shù)應應使用utf-8編碼,我的頁面用的是gbk.
解決:在json_encode函數(shù)前使用iconv('gbk','utf8')函數(shù)。函數(shù)
function gbk2utf8($data)
{
if(is_array($data))
{
return array_map('gbk2utf8', $data);
}
return iconv('gbk','utf-8',$data);
}
//以下是找的另一種方法
PHP從數(shù)據(jù)庫中得到的字段是中文,想用json_encode()后返回給前臺,可是json_encode對中文編碼后為null。
在 php 中使用 json_encode() 內(nèi)置函數(shù)(php > 5.2)可以使用得 php 中數(shù)據(jù)可以與其它語言很好的傳遞并且使用它。
這個函數(shù)的功能是將數(shù)值轉換成json數(shù)據(jù)存儲格式。
<?php
$arr = array
(
'Name'=>'希亞',
'Age'=>20
);
$jsonencode = json_encode($arr);
echo $jsonencode;
?>
程序運行結果如下:
{"Name":null,"Age":20}
json_encode 函數(shù)中中文被編碼成 null 了,Google 了一下,很簡單,為了與前端緊密結合,Json 只支持 utf-8 編碼,我認為是前端的 Javascript 也是 utf-8 的原因。
<?php
$array = array
(
'title'=>iconv('gb2312','utf-8','這里是中文標題'),
'body'=>'abcd...'
);
echo json_encode($array);
?>
這個程序的運行結果為:
{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}
數(shù)組中所有中文在json_encode之后都不見了或者出現(xiàn)\u2353等。
解決方法是用urlencode()函數(shù)處理以下,在json_encode之前,把所有數(shù)組內(nèi)所有內(nèi)容都用urlencode()處理一下,然用json_encode()轉換成json字符串,最后再用urldecode()將編碼過的中文轉回來。
<?php
/**************************************************************
*
* 使用特定function對數(shù)組中所有元素做處理
* @param string &$array 要處理的字符串
* @param string $function 要執(zhí)行的函數(shù)
* @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--;
}
/**************************************************************
*
* 將數(shù)組轉換為JSON字符串(兼容中文)
* @param array $array 要轉換的數(shù)組
* @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);
?>
這次成功了,運行結果如下:
{"Name":"希亞","Age":"20"}
- 淺談php和js中json的編碼和解碼
- php中json_encode中文編碼問題分析
- PHP學習散記_編碼(json_encode 中文不顯示)
- PHP中遇到BOM、<feff>編碼導致json_decode函數(shù)無法解析問題
- php使用json_encode對變量json編碼
- java解析php函數(shù)json_encode unicode 編碼問題
- php5.2 Json不能正確處理中文、GB編碼的解決方法
- php實現(xiàn)json編碼的方法
- PHP自定義遞歸函數(shù)實現(xiàn)數(shù)組轉JSON功能【支持GBK編碼】
- PHP 實現(xiàn) JSON 數(shù)據(jù)的編碼和解碼操作詳解
相關文章
php include和require的區(qū)別深入解析
本篇文章是對php中include與require的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06
ajax+php打造進度條代碼[readyState各狀態(tài)說明]
用Ajax+php打造進度條,其實很簡單。2010-04-04

