php - 未从数据库中检索到 UTF-8 特殊字符

标签 php mysql utf-8 mysqli

我有一个包含各种语言单词的 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 的意图是正确的,但实现和推理都是错误的。

  1. 不要无条件地直接向浏览器输出任何错误。程序员不会看到它,而用户与它无关。
  2. 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/

相关文章:

php - Eloquent:在模型和他的 parent 身上 Hook 到 'saving' 事件

php - 使用 GCM 向所有用户发送推送消息

php - 将变量作为 href 显示的文本传递

php - 在模式而不是新页面中加载查询搜索结果

php - Laravel eloquent where 方法给出不区分大小写

php - 无法插入数据库(steamauth)

MySQL 分组依据包括空行

ios - 当文件名包含 unicode(utf8) 字符时,ios 10.3 中的 fopen 出现问题

node.js - Node.js 中的加密和解密

xml - Postgres xmlelement 编码