编码:一切都是UTF-8但DB输出显示错误。有任何想法吗?

时间:2013-07-09 15:43:36

标签: php mysql apache encoding utf-8

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

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

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

在HTML头文件中,我用这行来设置字符集:

<meta charset="utf-8">

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

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

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

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

有谁知道可能的解决方案?

1 个答案:

答案 0 :(得分:4)

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