我已經改寫了一個網站,現在它是XHTML有效等,並使用UTF8。一切都很好,但如果數據庫中的任何地方都是歐洲字符,它只會顯示爲問號。€char顯示爲?在UTF8輸出
什麼是解決這個問題的正確方法? 由於輸出是由Typo3完成的我不能改變很多。
我已經改寫了一個網站,現在它是XHTML有效等,並使用UTF8。一切都很好,但如果數據庫中的任何地方都是歐洲字符,它只會顯示爲問號。€char顯示爲?在UTF8輸出
什麼是解決這個問題的正確方法? 由於輸出是由Typo3完成的我不能改變很多。
嘗試之前執行這些查詢是獲取數據的查詢:
SET NAMES utf8
SET CHARACTER SET utf8
如果您使用php/mysql擴展名(mysql_connect,mysql_query,...)和PHP 5> = 5.2.3,最好使用mysql_set_charset(),否則mysql_real_escape_string()不會「知道」編碼的更改。請參閱http://php.net/mysql_set_charset – VolkerK 2009-08-13 09:16:31
這可能是由於錯誤的數據庫連接編碼
查找SET名的SQL語句
$db_link = mysql_connect($host,$user,$passwd);
mysql_query("SET CHARACTER SET 'utf8';", $db_link);
mysql_query("SET NAMES 'utf8';", $db_link);
如果你確定你有正確的字符數據(0x20AC
),它也可以是客戶端的字體-側。如果您使用的字體不處理該特定字符,則只會看到一些默認問號。
但是,爲什麼不使用轉義碼€
,它給你:€
乾杯,
你可以嘗試像
$value = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', $value);
的 「ISO-8859-1」 的一部分可能會因您的MySQL表字符編碼而有所不同。
不要發出這兩個聲明!
不要發出
SET NAMES utf8
SET CHARACTER SET utf8
了一個又一個。它可能會造成麻煩。在SET NAMES utf8之後,我已經對SET CHARACTER SET utf8有過不好的經驗。
我建議只發出SET NAMES ...
MySQL的文檔具有解釋爲什麼:http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
簡而言之:SET NAMES ...
設置連接的字符集,以相同的客戶端ANS導致字符集。而SET CHARACTER NAME...
設置不同連接的字符集和整理。
請閱讀文檔,並決定哪一個更好的情況。或者更好地做一個測試。
對於包含€符號的數據庫列,您使用什麼charset(encoding,collation,...)?
問題可能是因爲在不使用UTF-8字符編碼時,€符號是某種難度的野獸,因此存儲在此列中的數據不會混淆。問題在於,當使用ISO-8859-15時,€符號被編碼爲\xA4
,而在使用Windows-1252(Windows機器上常見的西歐 - 歐洲字符集)時被編碼爲\x80
。 如果列中的數據編碼不正確,MySQL將無法正確將其轉碼爲UTF-8 - 即使您使用SET NAMES utf8
。
這隻會發生在€符號或與其他字符如ω(小歐米茄,utf8:0xCF 0x89)呢? – VolkerK 2009-08-13 09:24:28