为什么在Windows-1251中抛出异常?

时间:2016-02-28 07:48:59

标签: php utf-8

我已禁用本地MySQL服务器并查看相应的PDO异常。问题是消息中的所有西里尔符号都被破坏了(消息文本和路径中的cyryllic符号):

  

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;
});

1 个答案:

答案 0 :(得分:1)

尝试执行查询" SET NAMES utf8"连接到数据库后,也许有帮助。