我在带有 Apache 和 nginx 的 plesk 服务器上有一个 php/mysql 应用程序。我有一个奇怪的问题,只有当浏览器打开并且在该浏览器会话中第一次访问该网站时,像德语 ä ö ü 这样的元音变音(特殊字符)才会显示为“?”。一旦我刷新站点,它就不会再次发生,直到我关闭并重新打开浏览器。
从 DB over PHP 到 HTML,一切都是 UTF-8 编码的。
任何提示我应该寻找什么?
我注意到在删除 cookie、关闭和打开浏览器时,它不会发生。
我注意到问题只发生在来自(完全 UTF-8 编码的)MySql-DB 的内容上,并且只有当我登录时......非常奇怪!
解决方案
好吧,我不是那种在我太垃圾找不到我的错时默默走开的人!所以,希望我的错误将来能帮助其他人:
我有一个 PDO 连接,该连接仅在用户登录时发生,但他的会话超时。此查询根据 cookie 登录用户。在那个 SQL 连接上,我只有:
$db = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
代替
$db = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
看起来,这就是整个错误!