【问题标题】:UTF-8: showing correctly in database, however not in HTML despite utf-8 charsetUTF-8:在数据库中正确显示,但在 HTML 中显示不正确,尽管 utf-8 字符集
【发布时间】:2023-04-02 11:23:01
【问题描述】:

我使用 MySQL 5.1 并从 UTF-8 解码的 txt 文件中加载大约 270 万行到一个表中,该表本身声明为 utf8_unicode_ci,并且所有字符字段都声明为 utf8_unicode_ci,使用 @987654325 @...

在数据库本身中,所有字符似乎都是正确的,一切看起来都不错。但是,当我使用 php 打印它们时,字符显示为???,尽管我在 HTML 头中使用了 utf-8 声明:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

在另一个表(使用 utf-8)中,我从提交的表单中插入文本,这些字符在数据库中奇怪地出现,但当我使用 SELECT... 打印它们时再次正确显示。

所以,我想知道:出了什么问题? UTF-8 字符是否正确显示在数据库中或奇怪但当您再次SELECT 它们时它们是否正常?或者问题出在哪里(将文件加载到数据库、HTML 或两者之间)??

非常感谢您的任何提示或建议! :)

【问题讨论】:

  • 您是否在运行 MySQL 查询之前发出 SET NAMES utf8 命令?您确定您的页面实际上呈现为 utf-8(如果有 HTTP 标头 Content-Type: iso-8859-1,浏览器不同意哪个应该获胜)?
  • 我也建议你阅读joelonsoftware.com/articles/Unicode.html,确保你使用EVERYWHERE utf8 编码,MySQL 存储,MySQL 连接,PHP 本身,响应头,...
  • @DCoder:好吧,问题是,我从文件中加载了数据,并且由于文件名的正确路径有问题,我使用了 phpmyadmin 上的界面而不是纯 SQL 命令(加载数据输入文件)......你对http-header是什么意思?抱歉,如果这是一个愚蠢的问题,但它与 http-equiv="Content-Type" 相同吗?
  • 在您的 PHP 代码中,当您设置数据库连接时,您需要执行SET NAMES utf8 来告诉 MySQL 您将以 UTF-8 发送和接收数据.至于 HTTP 标头,您的 php/Apache 可能配置为发送带有响应的 Content-Type: text/html;charset=iso-8859-1 标头。如果发生这种情况,浏览器可能会混淆是否应该将页面呈现为 iso-8859-1 或 utf-8。
  • @Styxxy:感谢这篇有趣文章的链接!

标签: mysql html utf-8 character-encoding


【解决方案1】:

注意:MySQL's utf8 charset is limited, it only supports Unicode characters in the BMP that take up no more than three bytes. You should be using utf8mb4 instead.

如果 phpMyAdmin 将您输入的数据显示为正确的 Unicode 文本,那么我敢打赌,您在连接后没有执行SET NAMES utf8

【讨论】:

    【解决方案2】:

    在连接数据库后尝试使用此类代码,但在您接收数据之前

    $db->query('set character_set_client=utf8');
    $db->query('set character_set_connection=utf8');
    $db->query('set character_set_results=utf8');
    $db->query('set character_set_server=utf8');
    

    【讨论】:

    • @PraveenYadav 紧随$db = new mysqli($host, $username, $password, $dbname);
    • 您先生救了我的命!! :)
    猜你喜欢
    • 2023-03-05
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2011-08-09
    相关资源
    最近更新 更多