用 PHP 的 mysqli 创建数据库连接时的出错信息显示为乱码。
代码如下:
<?php
$conn = new mysqli('localhost', 'xxxxx', 'xxxxxx');
?>
尚未安装 mysql,只是想看一下 mysqli 在未安装 mysql 时的出错信息。而得到的结果如下:
在 chrome 和 IE11 下均为乱码。
由检查工具得到 http response header 中的 charset 为 utf-8,而 chrome 和 IE11 的默认设置也均为 utf-8。此外,php 文件本身以及 Apache 和 PHP 的默认编码设置也均为 utf-8。
目前推测是 mysqli 本身的问题,因为图中乱码的部分与 mysqli_connect_error()
得到的乱码一致。
由 mb_detect_encoding($conn->connect_error)
检测编码得到的结果显示,错误信息的编码也是 utf-8。
如何解决?
无意冒犯,但是鉴于很多答主尚未仔细阅读问题描述就匆忙下定论,我决定重复一下重要的事情:
没有安装 MySQL!
没有安装 MySQL!
没有安装 MySQL!
我只是想知道 mysqli 在没有安装 MySQL 的情况下得到的错误信息是什么。然而这个错误信息居然是乱码,所以才有了这个问题。
进展:在 console 中用 php 解释器运行能够得到正确的错误信息,而且发现是中文,如下图所示:
这个出错信息是由 Windows 系统的网络通信相关模块提供的(之前在代理服务器配置错误的情况下也经常在日志中看到这样的错误信息),所以目测这个锅要由 Win10 来背。
问题依然没有解决。虽然是中文,但是尝试了以 GB2312、GBK、GB18030 方式显示,亦为乱码,只不过乱码内容不同罢了。
在你的环境下,用PHP输出中文是否正常?
有没有加上
header('Content-type: text/html; charset=utf-8');
?手动改一下Chrome的编码试试看?