操作的程式碼如下:
複製程式碼 程式碼如下:
$usr = new User() ;
echo json_encode($usr);
?>
很簡單的代碼,無中文情況一切正常,輸出如下:
{"PlatformID":"123213" ,"UserID":"1023"}
一旦有中文的時候會出現兩種情況。
第一種情況是物件本身的某個值為中文的屬性是utf-8編碼,則會有以下輸出:
{"PlatformID":"123213","UserID":"1023", "UserName":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"}
其中的UserName是非人類語言,這個是正常的,如果我們用firebug看下就是中文的。 (這個糾結了我半天)
第二種情況是非utf-8編碼,輸出會變成null:
{"PlatformID":"123213","UserID":"1023","UserName": null}
很奇怪,查了手冊後知道json_encode是只對utf-8有效,其它編碼均會變成null.
下面就開始解決編碼轉換的問題。
在php.net上看到別人的函數如下:
複製程式碼 程式碼如下:
($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;
}
於是拿下來轉換編碼發現已經不為null.欣喜之下用firebug打開,發現並不是我原來的中文字符... .開始糾結......
難道是要讓他轉換成原來的編碼?回去找原始編碼......
測試開始:
1.把$usr->UserName直接輸出,頁麵設定charset=utf-8.亂碼
2.echo json_encode($usr )輸出UserName=null
3.頁面頭設定為charset=gbk,輸出正確->可以確定原編碼為gbk
最後透過IE,Chrome,Firefox測試得出結論:
1.保證頁面字符集與資料庫一致,輸出一定正常。
2.做json_encode時保證資料編碼是utf-8,json_decode正常。
3.如果要對非utf-8字元做json_encode,先轉換成utf-8。
4.對非utf-8字元做json_decode的時候,千萬不能忘記轉換成原先的編碼,否則會輸出亂碼!!
困擾了一天的問題終於搞定了。
以上就介紹了systemvolumeinformation php處理json時中文問題的解決方法,包括了systemvolumeinformation方面的內容,希望對PHP教程有興趣的朋友有幫助。