编码:所有内容都是UTF-8,但DB输出显示错误.任何想法


Encoding: everything is UTF-8 but the DB output is displayed wrong. Any Ideas?

我知道,关于编码有很多问题,但经过大量检查,不幸的是,问题仍然存在。

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

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

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

<meta charset="utf-8">

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

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

我很困惑,因为整个内容都是UTF-8,但在电脑上显示错误,但在笔记本上可以使用。我想问题出在服务器端,或者我在导出过程中做错了什么。

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

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

确保设置了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设置字符集。以这种方式准备连接对象,使您独立于数据库配置,如果需要,连接甚至会转换返回/发送的数据。