2012-05-17 49 views
0

從數據庫中獲取帶有特殊字符(瑞典語:「åäö」)的文本時出現問題。json_encode()UTF-8錯誤

如果我只是做了正常的查詢,

"SELECT * FROM" 

echo出來的結果:

while($row = mysql_fetch_assoc($result)) 
{ 
    echo $row['text']; 
} 

......結果是好的。

但是,這樣做json_encode($array)時,特殊字符已被替換:

{"id":"1","question":"fr\u00e5ga \u00e5\u00e4\u00f6".... 

我不知道有多少不同的東西試過,包括數據庫轉換爲UTF-8,字段utf8_general_ciutf8_encode($string)utf8_decode($string),....

+0

那些看起來像Unicode字符碼。你有沒有嘗試使用PHP解碼json數組? – martincarlin87

+0

你正在做'SET NAMES utf8';'以及? –

+0

連接到數據庫時使用mysql_set_charset嗎? http://php.net/manual/en/function.mysql-set-charset.php –

回答

3

您的輸出是正確的;這就是你應該如何在JSON中嵌入unicode字符。

+0

感謝您的回覆。但是,如果這個輸出是正確的,那麼我需要做些什麼才能使瀏覽器看起來正確(純文本)? – BlackMouse

+1

你不需要做任何事情;您的瀏覽器或您的JavaScript json庫將轉義代碼轉換爲單個字符。 – Joni

1

此行爲是設計使然。 這些是JSON Unicode轉義。

任何兼容的JSON解析器都會正確解析它們。

1
$str='{"id":"1","question":"fr\u00e5ga \u00e5\u00e4\u00f6"}'; 
$obj=json_decode($str); 
var_dump($obj); 

輸出這個

object(stdClass)#1 (2) { 
    ["id"]=> 
    string(1) "1" 
    ["question"]=> 
    string(13) "fråga åäö" 
} 

所以一切都很好 - 你正在看到的Unicode字符的JSON編碼。

在PHP 5.4,你可以通過JSON_UNESCAPED_UNICODE到json_encode,你會回來的JSON使用UTF-8編碼的字符(至少我這麼認爲 - 沒有測試該還)