【发布时间】:2012-09-26 02:46:10
【问题描述】:
我有以下问题:在一个非常简单的 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] 在以正确的UTF-8 编码查看文件时输出EF BF BD 字符。如果我手动将浏览器的编码切换为西方,则 mysqli 来源的字符串得到很好的解码,除了非西方字符被替换为“?”。
更奇怪的是,在我的开发环境中没有发生这种情况,而在我的网络服务器上却发生了。开发环境是 LAMP 栈(The Uniform Server),而 webserver 使用 nginx。
在这种情况下,我使用phpMyAdmin将数据输入到数据库中,并且在phpmyadmin中它可以完美显示。 phpMyAdmin 的排序规则也是 utf-8。我相信问题一定出在此处,就像在同一个网络服务器上一样,对于我通过 php(使用 POST)输入数据的其他站点,不会发生同样的问题。在这种情况下,数据在输入和查看时都可以正确看到(我的意思是在 php 生成的网页中),但特殊字符在 phpMyAdmin 中不正确。
你能帮我从哪里开始调试吗?是否连接到 php 或 mysql 或 nginx 或 phpMyAdmin?
【问题讨论】:
-
虽然不熟悉mysqli:PHP头是否告诉浏览器正确的编码?
标签: php mysql nginx phpmyadmin mysqli