【发布时间】:2016-06-11 08:11:54
【问题描述】:
我已禁用本地 MySQL 服务器并看到相应的 PDO 异常。问题是消息中的所有西里尔符号都被破坏(路径中的消息文本和西里尔符号):
PDOException: SQLSTATE[HY000] [2002] ������������ ��������������, ... ������������������ ������ ������ ��������������。在 D:\����������\domains\time.local\vendor\time\DB.php:25 堆栈跟踪:#0 ...
我发现这个文本实际上是 windows-1251 格式(当我在浏览器中手动切换到它时显示正常文本)。但是我到处都设置了 utf-8:在 Apache 中我有:
AddDefaultCharset utf-8
(Apache 发送正确的字符集标头)
所有 php 文件都是 UTF-8 格式,没有 BOM。在 php.ini 我有:
default_charset = "UTF-8"
internal_encoding = "UTF-8"
input_encoding = "UTF-8"
output_encoding = "UTF-8"
那么为什么它仍然使用 windows-1251?以及如何将此类消息切换为 utf-8?
我还看到致命错误和其他也使用 windows-1251。为什么?
Apache 2.4/PHP 7.0.3/Windows 10
P。 S. 我的异常处理程序很简单:
set_exception_handler(function (\Throwable $th) {
echo $th;
});
【问题讨论】: