2012-12-11 77 views
3

我一直在尋找3個小時左右,我知道有很多這樣的問題已經被問到,但我還沒有找到任何解決方案,適用於我的問題當試圖通過我的數據庫上的SELECT查詢輸出結果的重音字符時。JSON輸出口音問題

$itemsList = array(); 
while($row = mysql_fetch_assoc($res)){ 
    $itemsList[Items][] = ($row); 
} 
echo json_encode($itemsList); 

這將輸出:

{"Items": [ 

{"user_name":"misterP", 

"comment":"\u00c3\u00a9t\u00c3\u00a9", 

"image_name":"403885300736874.jpg"}]} 

但我需要輸出的口音,就像這樣:

{"Items": [ 

{"user_name":"misterP", 

"comment":"été", 

"image_name":"403885300736874.jpg"}]} 
  • 我的數據庫和表有interclassement utf8_general_ci
  • 的DATAS插入我的數據庫中是utf8_encoded
  • 我的PHP腳本是Unicode(UTF-8)
  • 我做了「mysql_set_charset('utf8'); 「之前,選擇在我的數據庫
  • 如果這可以幫助別人:y中的數據庫,單詞‘ETE’是:‘©TA©’

所以,我真的不知道做什麼了吧,我真的堅持的口音,我不能得到它的工作。在此先感謝!

+0

你可能想給這個頁面一個閱讀,看看你是否錯過了編碼方面的任何東西,並且還嘗試在頁面下方測試2/3:http://kunststube.net/frontback/ – sgroves

回答

6

這並不重要。當JSON解碼,他們再次成爲字符。

如果使用php 5.4> =,你可以通過JSON_UNESCAPED_UNICODEjson_encode

json_encode($data, JSON_UNESCAPED_UNICODE) 

但同樣,unicode逃脫工作也一樣好,並使數據ascii安全。

編輯:

它看起來像你的數據已經被擰緊,甚至json_encode之前。看起來你已經將它「雙編碼」爲utf-8。

插入我的數據庫中的數據都是你在使用類似utf8_encode utf8_encoded

?插入數據庫時​​,不需要在代碼中執行任何操作。如果您使用utf8_encode將數據插入到數據庫中,那麼解釋雙重編碼。所有你需要的是數據是utf-8並且在插入之前有mysql_set_charset('utf8')


有趣的是,要知道,如果你的JSON有轉義unicode的,JSON的​​即使你加括號,如果JSON包含U+2028U+2029

+0

不幸的是我我正在使用PHP 5.3.18 有沒有這個版本的解決方法? – Seb83

+0

@ Seb83 json根本就不是你的問題,問題在於你如何在數據庫中插入數據。看到我的編輯 – Esailija

+0

所以真正的解決方案是糾正數據庫中的錯誤數據。無論代碼是什麼造成數據輸入錯誤,都需要修正。 – tripleee