我正在使用Last.fm API來獲取藝術家的一些信息。我將信息保存在數據庫中,然後顯示在我的網頁上。 但「(雙引號)等字符顯示爲」。HTML頁面上的奇怪字符
例藝術家信息http://www.last.fm/music/David+Penn
和我得到了第一線「從馬德里 - 西班牙製片人,編曲,DJ和音樂人。他有自己的唱片公司€œZenRecordsâ€和」。
我的Db是UTF-8,但我不知道爲什麼這個錯誤還在。
我正在使用Last.fm API來獲取藝術家的一些信息。我將信息保存在數據庫中,然後顯示在我的網頁上。 但「(雙引號)等字符顯示爲」。HTML頁面上的奇怪字符
例藝術家信息http://www.last.fm/music/David+Penn
和我得到了第一線「從馬德里 - 西班牙製片人,編曲,DJ和音樂人。他有自己的唱片公司€œZenRecordsâ€和」。
我的Db是UTF-8,但我不知道爲什麼這個錯誤還在。
你應該一直使用UTF-8。檢查:
您與數據庫的連接是UTF-8(使用mysql_set_charset
);
您輸出的頁面被標記爲UTF-8(<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
);
當您從數據庫輸出字符串時,您使用htmlspecialchars()
而不是htmlentities()
對它們進行HTML編碼。
htmlentities
HTML編碼的所有非ASCII字符,並默認假設你通過它在ISO 8859字節。所以如果你通過編碼爲UTF-8(字節0xE2,0x80,0x9C)的「
,你會得到“
,而不是預期的“
或“
。這可以通過傳入utf-8
作爲可選的$charset
參數來解決。
但是,通常使用htmlspecialchars()
代替HTML實體引用,因爲這樣會將非ASCII字符單獨留作原始字節。這會導致較小的頁面輸出,所以最好只要你確定你正在生成的HTML會保留它的字符集信息(除了在郵件中發送HTML代碼片段之類的情況之外,你通常可以依賴這些信息) )。
htmlspecialchars()
確實有一個可選的參數$charset
過,但因爲這使得在默認的ISO-8859-1字符集的行爲的變化可能會導致其設置爲utf-8
並不重要。如果你正在用Shift-JIS這樣的老式多字節編碼產生輸出,你不必擔心正確設置這個參數,但是今天這很少見,因爲大多數理智的人優先使用UTF-8。
這似乎是一個字符編碼錯誤。確認您正在以正確的編碼閱讀網頁,並以正確的編碼顯示結果。
我應該使用什麼編碼? – Arshdeep 2010-06-24 15:44:32