【问题标题】:Encoding: everything is UTF-8 but the DB output is displayed wrong. Any Ideas?编码:一切都是 UTF-8,但数据库输出显示错误。有任何想法吗?
【发布时间】:2013-07-07 07:33:33
【问题描述】:

我知道,有很多关于编码的问题,但是在检查了很多之后,问题仍然存在。

我将 PHP/HTML 文件 (zip) 和 MySQL-Dump (zip) 从笔记本导出到 PC(不使用 git)。每个文件都是 UTF-8,每个字母都直接显示在编辑器和数据库 (PHPMyAdmin) 中。

但是当我在任何浏览器中打开项目时,某些字母(ä、ü、ü、...)显示错误。

在 HTML 头中,我有这一行用于设置字符集:

<meta charset="utf-8">

使用这一行,硬编码的字母显示正确,但数据库中的值显示错误。

当我删除该行时,我得到相反的结果:硬编码是错误的,数据库值是正确的。

我很困惑,因为整个内容都是 UTF-8,但在 PC 上显示错误,但在笔记本上可以正常工作。我猜是服务器端的问题,或者我在导出过程中做错了。

我想避免使用 PHP 函数 utf8_encode() 和 utf8_decode()。

有人知道可能的解决方案吗?

【问题讨论】:

标签: php mysql apache encoding utf-8


【解决方案1】:

确保您设置了 PHP 数据库连接对象的字符集。这应该在查询数据库之前完成。

// tells the mysqli connection to deliver UTF-8 encoded strings.
$db = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
$db->set_charset('utf8');

// tells the pdo connection to deliver UTF-8 encoded strings.
$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8";
$db = new PDO($dsn, $dbUser, $dbPassword);

以上示例展示了如何为 SQLI 或 PDO 设置字符集。以这种方式准备连接对象,使您独立于数据库配置,如有必要,连接甚至会转换返回/发送的数据。

【讨论】:

  • 我正在使用 PDO 并且没有设置字符集。但我想知道为什么这仍然适用于我的笔记本电脑。感谢您的回答!
  • @Mr.Bombastic - 这取决于您的 PHP 安装的默认设置,这可能因您的 Windows PC 和您的 UNIX 服务器(通常默认为 latin1)而异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2015-09-03
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多