2009-08-13 40 views
2

我已經改寫了一個網站,現在它是XHTML有效等,並使用UTF8。一切都很好,但如果數據庫中的任何地方都是歐洲字符,它只會顯示爲問號。€char顯示爲?在UTF8輸出

什麼是解決這個問題的正確方法? 由於輸出是由Typo3完成的我不能改變很多。

+0

這隻會發生在€符號或與其他字符如ω(小歐米茄,utf8:0xCF 0x89)呢? – VolkerK 2009-08-13 09:24:28

回答

5

嘗試之前執行這些查詢是獲取數據的查詢:

SET NAMES utf8 
SET CHARACTER SET utf8 
+1

如果您使用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

4

這可能是由於錯誤的數據庫連接編碼

查找SET名的SQL語句

$db_link = mysql_connect($host,$user,$passwd); 
    mysql_query("SET CHARACTER SET 'utf8';", $db_link); 
    mysql_query("SET NAMES 'utf8';", $db_link); 
0

如果你確定你有正確的字符數據(0x20AC),它也可以是客戶端的字體-側。如果您使用的字體不處理該特定字符,則只會看到一些默認問號。

但是,爲什麼不使用轉義碼€,它給你:€

乾杯,

0

你可以嘗試像

$value = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', $value); 

的 「ISO-8859-1」 的一部分可能會因您的MySQL表字符編碼而有所不同。

2

不要發出這兩個聲明!

不要發出

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...設置不同連接的字符集和整理。

請閱讀文檔,並決定哪一個更好的情況。或者更好地做一個測試。

2

對於包含€符號的數據庫列,您使用什麼charset(encoding,collat​​ion,...)?

問題可能是因爲在不使用UTF-8字符編碼時,€符號是某種難度的野獸,因此存儲在此列中的數據不會混淆。問題在於,當使用ISO-8859-15時,€符號被編碼爲\xA4,而在使用Windows-1252(Windows機器上常見的西歐 - 歐洲字符集)時被編碼爲\x80。 如果列中的數據編碼不正確,MySQL將無法正確將其轉碼爲UTF-8 - 即使您使用SET NAMES utf8