2012-04-28 80 views
1

我通過StackOverFlow搜索,發現了類似的問題,但沒有回答我的具體情況,所以我想這是一個新問題。如何防止鑽石形狀的問號出現?

當我插入條目到數據庫形式的文本框,我使用mysql_real_escape_string();然後當我顯示我使用htmlspecialchars()的信息;

我使用UTF-8作爲字符集。我們正在使用HTML5格式。數據庫的排序規則默認設置爲latin1_swedish_ci,所以我使用它。對於所有表設置爲latin1_swedish_ci。對於表中的所有字段,我們使用utf8_general_ci。

作爲一個例子,這是它的外觀時,顯示出其:

�Who are you?� he asked his iPhone. �I am a humble 
    personal assistant,� the device replied, bringing the biggest... 

如何解決這個問題?

+2

您能夠更改字符集數據庫的?如果可以的話,也可以使用UTF-8 - 它可以節省一點麻煩。否則,如果要在數據庫中存儲可以用latin1_swedish表示的特殊字符,那麼在顯示之前您需要將它們轉換爲UTF-8。而且,在插入數據時,您需要將UTF-8轉換回latin1 - 這就是爲什麼將所有內容都設置爲相同字符集更容易的原因。 – halfer 2012-04-28 22:12:25

+2

您將Unicode數據插入到Latin1數據庫。將數據庫轉換爲Unicode或在插入數據之前將數據轉換爲Latin1。 – JJJ 2012-04-28 22:12:36

+2

確保你的文件也有UTF-8編碼 – 2012-04-28 22:12:41

回答

4

你的問題是整理設置,確保它是utf8的一個(如utf8_general_ci)的數據庫,表和文本字段之一。

而且確保您設置您的連接字符集爲UTF-8,以及:

SET NAMES utf8; 
+1

表中的字段使用utf8_general_ci。 – ariel 2012-04-28 22:16:12

+0

對數據庫和表使用相同的utf8排序規則。更新我的答案 – ilanco 2012-04-28 22:19:05

+1

啊,如果所有字段都是UTF-8,那麼表(afaik)表和數據庫排序規則將不會產生任何效果(除了爲未添加排序規則的新表/列添加默認排序規則外)。因此,它將成爲連接字符串,就像@ilanco所說的那樣。 – halfer 2012-04-28 22:24:38