《PHP學(xué)習(xí):php json中文編碼為null的解決辦法》要點(diǎn):
本文介紹了PHP學(xué)習(xí):php json中文編碼為null的解決辦法,希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP實(shí)戰(zhàn)今天使用json_encode函數(shù),發(fā)現(xiàn)中文竟成了null.
PHP實(shí)戰(zhàn)原因分析:使用json_encode函數(shù)應(yīng)應(yīng)使用utf-8編碼,我的頁面用的是gbk.
PHP實(shí)戰(zhàn)解決:在json_encode函數(shù)前使用iconv('gbk','utf8')函數(shù).函數(shù)
PHP實(shí)戰(zhàn)
function gbk2utf8($data)
{
if(is_array($data))
{
return array_map('gbk2utf8', $data);
}
return iconv('gbk','utf-8',$data);
}
PHP實(shí)戰(zhàn)//以下是找的另一種方法
PHP實(shí)戰(zhàn)PHP從數(shù)據(jù)庫中得到的字段是中文,想用json_encode()后返回給前臺,可是json_encode對中文編碼后為null.
PHP實(shí)戰(zhàn)在 php 中使用 json_encode() 內(nèi)置函數(shù)(php > 5.2)可以使用得 php 中數(shù)據(jù)可以與其它語言很好的傳遞并且使用它.
PHP實(shí)戰(zhàn)這個函數(shù)的功能是將數(shù)值轉(zhuǎn)換成json數(shù)據(jù)存儲格式.
PHP實(shí)戰(zhàn)
<?php
$arr = array
(
'Name'=>'希亞',
'Age'=>20
);
$jsonencode = json_encode($arr);
echo $jsonencode;
?>
PHP實(shí)戰(zhàn)程序運(yùn)行結(jié)果如下:
{"Name":null,"Age":20}
json_encode 函數(shù)中中文被編碼成 null 了,Google 了一下,很簡單,為了與前端緊密結(jié)合,Json 只支持 utf-8 編碼,我認(rèn)為是前端的 Javascript 也是 utf-8 的原因.
PHP實(shí)戰(zhàn)
<?php
$array = array
(
'title'=>iconv('gb2312','utf-8','這里是中文標(biāo)題'),
'body'=>'abcd...'
);
echo json_encode($array);
?>
PHP實(shí)戰(zhàn)這個程序的運(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實(shí)戰(zhà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);
?>
PHP實(shí)戰(zhàn)這次成功了,運(yùn)行結(jié)果如下:
{"Name":"希亞","Age":"20"}
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/2307.html