我知道,有很多关于编码的问题,但经过大量检查后,问题仍然存在。
我将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()。
有谁知道可能的解决方案?
答案 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设置字符集。以这种方式准备连接对象使您独立于数据库配置,如果有必要,连接甚至可以转换返回/发送的数据。