我有以下问题:在一个非常简单的 php-mysqli 查询上:
if ( $result = $mysqli->query( $sqlquery ) )
{
$res = $result->fetch_all();
$result->close();
}
我得到的字符串被错误地编码为西方编码的字符串,尽管数据库、表和列是utf8_general_ci
排序规则的。php 脚本本身是 utf-8 编码的,并且脚本的 mysql-less 部分得到了正确的编码。所以说echo "ő"
完美,但是echo $res[0]
从前面的示例中,EF BF BD
当以正确的 UTF-8 编码查看文件时输出字符。如果我手动将浏览器的编码切换为西方,则 mysqli 来源的字符串得到很好的解码,除了非西方字符被替换为“?”。
更奇怪的是,在我的开发环境中没有发生这种情况,而在我的网络服务器上却发生了。开发人员环境是 LAMP 堆栈(统一服务器),而网络服务器使用 nginx。
在这种情况下,我使用 phpMyAdmin 在数据库中输入了数据,并且在 phpmyadmin 中它完美显示。phpMyAdmin 的排序规则也是 utf-8。我相信问题一定是在这里的某个地方,就像在同一个网络服务器上一样,对于我通过 php(使用 POST)输入数据的另一个站点,同样的问题不会发生。在这种情况下,数据在输入和查看数据时都是正确可见的(我的意思是在 php 生成的网页中),但特殊字符在 phpMyAdmin 中不正确。
你能帮我从哪里开始调试吗?它是否连接到php或mysql或nginx或phpMyAdmin?