php json中文編碼為null的解決辦法
今天使用json_encode函數(shù),發(fā)現(xiàn)中文竟成了null。
原因分析:使用json_encode函數(shù)應(yīng)應(yīng)使用utf-8編碼,我的頁(yè)面用的是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ù)庫(kù)中得到的字段是中文,想用json_encode()后返回給前臺(tái),可是json_encode對(duì)中文編碼后為null。
在 php 中使用 json_encode() 內(nèi)置函數(shù)(php > 5.2)可以使用得 php 中數(shù)據(jù)可以與其它語(yǔ)言很好的傳遞并且使用它。
這個(gè)函數(shù)的功能是將數(shù)值轉(zhuǎn)換成json數(shù)據(jù)存儲(chǔ)格式。
<?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ǎn)單,為了與前端緊密結(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); ?>
這個(gè)程序的運(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()將編碼過(guò)的中文轉(zhuǎn)回來(lái)。
<?php /************************************************************** * * 使用特定function對(duì)數(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中文編碼問(wèn)題分析
- PHP學(xué)習(xí)散記_編碼(json_encode 中文不顯示)
- PHP中遇到BOM、<feff>編碼導(dǎo)致json_decode函數(shù)無(wú)法解析問(wèn)題
- php使用json_encode對(duì)變量json編碼
- java解析php函數(shù)json_encode unicode 編碼問(wèn)題
- 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-12PHP實(shí)現(xiàn)順時(shí)針打印矩陣(螺旋矩陣)的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)順時(shí)針打印矩陣(螺旋矩陣)的方法,涉及PHP基于數(shù)組遍歷、運(yùn)算模擬打印實(shí)現(xiàn)螺旋矩陣功能的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01php include和require的區(qū)別深入解析
本篇文章是對(duì)php中include與require的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06ajax+php打造進(jìn)度條代碼[readyState各狀態(tài)說(shuō)明]
用Ajax+php打造進(jìn)度條,其實(shí)很簡(jiǎn)單。2010-04-04PHP用SAX解析XML的實(shí)現(xiàn)代碼與問(wèn)題分析
近日在做一個(gè)解析XML的小程序,因?yàn)榉?wù)器是PHP4的,XML解析函數(shù)只能用SAX方式的xml_parser來(lái)解析了。2011-08-08讓的PHP代碼飛起來(lái)的40條小技巧(提升php效率)
這是在網(wǎng)上看到的一篇帖子,講的自己感覺(jué)比較實(shí)用,很注重細(xì)節(jié)【呵呵,當(dāng)然是指對(duì)像我一樣的業(yè)余PHPer而言了】,又擔(dān)心以后找不到原帖子,所以就轉(zhuǎn)了過(guò)來(lái)。2010-04-04