2012-06-08 20 views
0

當試圖用jQuery解析時,會導致非法的JSON。整個文檔,數據庫連接以UTF-8編碼。json_encode不能轉義UTF-8 w/PHP 5.2.8

代碼

header('Content-Type: application/json; charset=utf-8'); 
echo (json_encode($products)); 

這就是輸出(更新)

{ 
    "D8": { 
    "title": "Green A\/C U\/V Dye Self-Measure bottle treats 32 véhicules 8 oz. (237 ml)", 
    "image": "http:\/\/www.supercool.ac\/wp-content\/uploads\/2011\/10\/D8.png", 
    "Description": "<ul>\n<li>Efficace dans le R-134a et R-12 systèmes de réfrigération<\/li>\n<li>Detectable when exposed to U\/V light<\/li>\n<li>Compatible avec PAG, ester, les huiles minérales et<\/li>\n<li>Ne contient pas de solvants!<\/li>\n<li>Will not harm A\/C systems or recovery equipment<\/li>\n<li>Universal A\/C Dye Safe for Hybrid and<br \>\n&nbsp;Véhicules électriques<\/li>\n<li>Partie # D8<\/li>\n<\/ul>\n" 
    } 
} 

不應該這樣被默認逃脫?我能做些什麼來逃避它?

更新:

json_encode被重整的HTML(描述字段)。它產生了一個無效的<br />的br標籤,注意正斜槓。我認爲這僅限於5.2.8。爲了解決這個問題,我剛剛剝離了br標籤作爲臨時解決方案,直到我能說服主機升級。

preg_replace('/\<br\s\/>/', '', string); 
+0

咦?它應該默認這樣做。奇怪的 –

+0

在那裏沒有特殊含義的字符,它不需要轉義。 – Quentin

+0

http://php.net/manual/en/function.json-encode.php - 搜索utf-8 –

回答

1

http://codepad.org/oWMMVwsE

PHP將編碼UTF8字符。

http://jsfiddle.net/

jQuery的可以罰款解析它。

如果你將它回顯給瀏覽器,不要忘記瀏覽器將解釋utf8編碼並顯示該字符。所以json編碼的字符串必須從CLI讀取或從源讀取。

+0

我已經從源代碼和CLI查看它,並仍然發生相同的結果。鍵盤不太相關,因爲它可能不使用相同版本的PHP,謝謝。 – scottkf

+0

鍵盤使用php 5.2.5 – Lee

+0

jsfiddle鏈接是主頁! –

1

你的輸出有最後一個屬性值後尾隨逗號:

}, 
} 

這是無效的JSON。它看起來像你的PHP副本嚴重破壞json_encode的實施。

我想看看在乾淨的虛擬機上用全新的PHP安裝你的代碼。

+0

這是一個錯字。它打破
標籤。正斜槓混亂了它。 json_encode是否應該處理這個問題,還是必須確保事先使用htmlentities進行編碼? – scottkf

+0

'json_encode'應該照顧那個。 – Quentin