我有一个包含各种语言单词的 MySQL 数据库,因此我将表列设置为“utf8_unicode_ci”。 UTF-8 可以包含所有可能的字符,并且 unicode_ci 也具有正确的排序(但性能较低)。当我在 phpMyAdmin 中浏览表格时,所有特殊字符看起来都正常。问题是当我 SQL 选择一堆名称并将它们显示在我的网站上时,字符无法显示/编码不正确(看起来像 Chrome 中的问号,资源管理器中的方 block 等)。我的网站有正确的编码:
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
如果我将它们粘贴到我的页面上,我也可以显示各种字符。只有在从数据库中检索它们时才会出现问题。 php mysqli_query() 是否更改了编码或 SELECT 查询是否以某种方式搞砸了?
最佳答案
虽然@user4035 的意图是正确的,但实现和推理都是错误的。
- 不要无条件地直接向浏览器输出任何错误。程序员不会看到它,而用户与它无关。
SET NAMES 'UTF8'
不等于set_charset()
函数。前者是一个特定的 SQL 查询,不应用于支持后者的功能。
更好的版本如下。
您必须使用 set_charset()
方法设置连接字符集:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con=mysqli_connect("host", "user", "pw", "db");
$con->set_charset("utf8");
关于php - 未从数据库中检索到 UTF-8 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701344/