php處理json時中文問題的解決方法

來源:文萃谷 3.62K

項目裏面用到json操作,之前測試都是很正常的,但有時候把對象轉換成json的時候,其中有個中文屬性變成了null.遇到這種情況怎麼辦呢?下面小編為大家整理了php處理json時中文問題的解決方法,希望能幫到大家!

php處理json時中文問題的解決方法

操作的代碼如下:

複製代碼 代碼如下:

$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.

下面就開始解決編碼轉化的問題。

在上看到別人的`函數如下:

複製代碼 代碼如下:

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;

}

於是拿下來轉換編碼發現已經不為null.欣喜之下用firebug打開,發現並不是我原來的中文字符....開始糾結......

難道是要讓他轉換成原來的編碼?回去尋找原始編碼......

測試開始:

1.把$usr->UserName直接輸出,頁面頭設置charset=utf-8.亂碼

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的時候,千萬不能忘記轉換成原先的編碼,否則會輸出亂碼!

熱門標籤