- 相關(guān)推薦
php處理json時中文問題的解決方法
在項(xiàng)目里面用到j(luò)son操作,之前測試都是很正常的,但有時候把對象轉(zhuǎn)換成json的時候,其中有個中文屬性變成了null.遇到這種情況怎么辦呢?下面小編為大家整理了php處理json時中文問題的解決方法,希望能幫到大家!
操作的代碼如下:
復(fù)制代碼 代碼如下:
$usr = new User();
echo json_encode($usr);
?>
很簡單的代碼,無中文情況一切正常,輸出如下:
{"PlatformID":"123213","UserID":"1023"}
一旦有中文的時候會出現(xiàn)兩種情況。
第一種情況是對象本身的某個值為中文的屬性是utf-8編碼,則會有如下輸出:
{"PlatformID":"123213","UserID":"1023","UserName":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"}
其中的UserName是非人類語言,這個是正常的,如果我們用firebug看下就是中文的。(這個糾結(jié)了我半天)
第二種情況是非utf-8編碼,輸出會變成null:
{"PlatformID":"123213","UserID":"1023","UserName":null}
很奇怪,查了手冊后知道json_encode是只對utf-8有效,其它編碼均會變?yōu)閚ull.
下面就開始解決編碼轉(zhuǎn)化的問題。
在php.net上看到別人的函數(shù)如下:
復(fù)制代碼 代碼如下:
private function to_utf8($in)
{
if (is_array($in)) {
foreach ($in as $key => $value)
{
$out[$this->to_utf8($key)] = $this->to_utf8($value);
}
}
elseif(is_string($in))
{
if(mb_detect_encoding($in) != "UTF-8")
return utf8_encode($in);
else
return $in;
}
else
{
return $in;
}
return $out;
}
于是拿下來轉(zhuǎn)換編碼發(fā)現(xiàn)已經(jīng)不為null.欣喜之下用firebug打開,發(fā)現(xiàn)并不是我原來的中文字符....開始糾結(jié)......
難道是要讓他轉(zhuǎn)換成原來的編碼?回去尋找原始編碼......
測試開始:
1.把$usr->UserName直接輸出,頁面頭設(shè)置charset=utf-8.亂碼
2.echo json_encode($usr)輸出UserName=null
3.頁面頭設(shè)置為charset=gbk,輸出正確->可以確定原編碼為gbk
最后通過IE,Chrome,Firefox測試得出結(jié)論:
1.保證頁面字符集與數(shù)據(jù)庫一致,輸出一定正常 。
2.做json_encode時保證數(shù)據(jù)編碼是utf-8,json_decode正常。
3.如果要對非utf-8字符做json_encode,先轉(zhuǎn)換成utf-8。
4.對非utf-8字符做json_decode的時候,千萬不能忘記轉(zhuǎn)換成原先的編碼,否則會輸出亂碼!
【php處理json時中文問題的解決方法】相關(guān)文章:
PHP中json-encode格式中文問題解決辦法10-27
關(guān)于php中文亂碼的解決方法07-09
完美解決PHP中文亂碼問題07-18
PHP處理Ajax請求與Ajax跨域問題05-26
php中序列化和json使用方法10-28
PHP怎么處理密碼08-28
PHP處理密碼的方式10-10
PHP浮點(diǎn)型的數(shù)據(jù)的解決方法09-29
PHP解決session死鎖的解決方法09-17
如何處理PHP異常10-30