2012-04-28 56 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