首先,确保您的 MySQL 表使用 UTF-8 作为其编码。如果是,它将如下所示:
mysql> SHOW CREATE TABLE Users (
...
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 |
接下来,确保您的 HTML 页面设置为显示 UTF-8:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
</head>
....
</html>
然后它应该工作。
编辑:我故意不谈论排序规则,因为我认为它已经被考虑过了,但是为了大家的利益,让我在这个答案中添加更多内容。
你说,
我在 MySQL 表排序规则中将字符集设置为 UTF-8 ...。
表排序规则与字符集不同。
Collation 是为了 QUERYING 的目的自动尝试将一个字符集转换为另一个字符集的行为。例如,如果您有一个 latin1 字符集和一个 UTF-8 排序规则,并且您执行类似 SELECT * FROM foo WHERE bar LIKE '%—%'; 之类的操作。(UTF-8 U+2014) 在具有 latin1 字符集的表上匹配 L+0151或U+2014。
并非如此巧合...如果您将此 latin1 编码的字符输出到 UTF-8 编码的网页上,您将得到以下信息:
这是一个“测试”。
确切地说,这似乎是您的问题的输出。这是复制它的 HTML:
<?php
$string = "This is a “test”.";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf8"/>
</head>
<body>
<p><?php echo $string; ?></p>
</body>
</html>
确保将此文件保存在 latin1...
要查看您的表设置的字符集,请运行以下查询:
SELECT CCSA.character_set_name, TABLE_COLLATION FROM information_schema.`TABLES` T,
information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
AND T.table_schema = "database"
AND T.table_name = "table";
唯一适合您使用的结果(除非您使用多种非英语语言)是:
+--------------------+-----------------+
| character_set_name | TABLE_COLLATION |
+--------------------+-----------------+
| utf8 | utf8_general_ci |
+--------------------+-----------------+
感谢您的支持;-)