php json中文編碼為null的解決辦法
今天使用json_encode函數(shù),發(fā)現(xiàn)中文竟成了null。
原因分析:使用json_encode函數(shù)應(yīng)應(yīng)使用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ù)值轉(zhuǎn)換成json數(shù)據(jù)存儲格式。
<?php
$arr = array
(
'Name'=>'希亞',
'Age'=>20
);
$jsonencode = json_encode($arr);
echo $jsonencode;
?>
程序運(yùn)行結(jié)果如下:
{"Name":null,"Age":20}
json_encode 函數(shù)中中文被編碼成 null 了,Google 了一下,很簡單,為了與前端緊密結(jié)合,Json 只支持 utf-8 編碼,我認(rèn)為是前端的 Javascript 也是 utf-8 的原因。
<?php
$array = array
(
'title'=>iconv('gb2312','utf-8','這里是中文標(biāo)題'),
'body'=>'abcd...'
);
echo json_encode($array);
?>
這個程序的運(yùn)行結(jié)果為:
{"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()轉(zhuǎn)換成json字符串,最后再用urldecode()將編碼過的中文轉(zhuǎn)回來。
<?php
/**************************************************************
*
* 使用特定function對數(shù)組中所有元素做處理
* @param string &$array 要處理的字符串
* @param string $function 要執(zhí)行的函數(shù)
* @return boolean $apply_to_keys_also 是否也應(yīng)用到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ù)組轉(zhuǎn)換為JSON字符串(兼容中文)
* @param array $array 要轉(zhuǎn)換的數(shù)組
* @return string 轉(zhuǎn)換得到的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);
?>
這次成功了,運(yùn)行結(jié)果如下:
{"Name":"希亞","Age":"20"}
- 淺談php和js中json的編碼和解碼
- php中json_encode中文編碼問題分析
- PHP學(xué)習(xí)散記_編碼(json_encode 中文不顯示)
- PHP中遇到BOM、<feff>編碼導(dǎo)致json_decode函數(shù)無法解析問題
- php使用json_encode對變量json編碼
- java解析php函數(shù)json_encode unicode 編碼問題
- php5.2 Json不能正確處理中文、GB編碼的解決方法
- php實(shí)現(xiàn)json編碼的方法
- PHP自定義遞歸函數(shù)實(shí)現(xiàn)數(shù)組轉(zhuǎn)JSON功能【支持GBK編碼】
- PHP 實(shí)現(xiàn) JSON 數(shù)據(jù)的編碼和解碼操作詳解
相關(guān)文章
php創(chuàng)建桌面快捷方式實(shí)現(xiàn)方法
這篇文章主要介紹了php創(chuàng)建桌面快捷方式實(shí)現(xiàn)方法,需要的朋友可以參考下2015-12-12
PHP實(shí)現(xiàn)順時針打印矩陣(螺旋矩陣)的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)順時針打印矩陣(螺旋矩陣)的方法,涉及PHP基于數(shù)組遍歷、運(yùn)算模擬打印實(shí)現(xiàn)螺旋矩陣功能的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
php include和require的區(qū)別深入解析
本篇文章是對php中include與require的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
ajax+php打造進(jìn)度條代碼[readyState各狀態(tài)說明]
用Ajax+php打造進(jìn)度條,其實(shí)很簡單。2010-04-04
PHP用SAX解析XML的實(shí)現(xiàn)代碼與問題分析
近日在做一個解析XML的小程序,因?yàn)榉?wù)器是PHP4的,XML解析函數(shù)只能用SAX方式的xml_parser來解析了。2011-08-08

