php 5.4 异常字符集

Posted

技术标签:

【中文标题】php 5.4 异常字符集【英文标题】:php 5.4 charset for Exception 【发布时间】:2014-12-22 15:06:00 【问题描述】:

php 5.4 中,我的代码无法正常工作。我使用西里尔字符集。简而言之:

throw new Exception('Сообщение');

将输出:

致命错误:在 test.php ...

虽然结果是:

致命错误:带有消息的未捕获异常“异常”...

如果我不使用西里尔字符,结果是好的。此外,如果我在 5.3 中运行此代码,我将得到正确的结果。 IE。如果我使用西里尔字母,结果消息是空字符串。

【问题讨论】:

【参考方案1】:

报告了异常中非 utf-8 字符的问题。尝试将消息转换为 utf-8,如下所示:

throw new Exception(utf8_encode('Сообщение'));

如果这不起作用,请尝试以下方法:

$message = 'Сообщение';
$message = mb_convert_encoding($message, 'Windows-1251', 'UTF-8');
throw new Exception($message);

-- 编辑--

实际的问题不是没有存储异常消息,而是——异常没有正确显示。在 PHP 5.3 中,xdebug 默认没有打开,而在 PHP 5.4 中,它是。 xdebug 设置为以 UTF-8 显示所有内容,并且您的消息可能以其他字符集编码,因此无法正确呈现消息。

如果你滚动到this 页面的底部,你会发现一条评论提到了这个问题。

PHP 自己在 here 上跟踪了这个问题

This *** thread 也与同一问题有关。

您可以通过将 xdebug 编码设置为非 utf-8 字符集来摆脱困境。请read the xdebug manual regarding this

【讨论】:

关键是我已经有一个大项目,所以很遗憾这对我来说不是一个解决方案。可能我正在寻找一种能让我的代码正常工作的设置。 请您提供这些问题的链接吗? 用一些参考资料和更好的解释编辑了答案 killneel,谢谢!但是是不是意味着如果我不使用xdebug,我应该将它添加到php中并配置它默认使用西里尔字符集? 我已经编辑了答案以反映 OP 指定的字符集。另外,我的回答涵盖了字符集转换以外的内容。请在投票前阅读整个主题。

以上是关于php 5.4 异常字符集的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.4 运行 make:auth 报错

PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)

PHP 5.4 已废弃 magic_quotes_gpc,PHP安全转义函数详解(addslashes htmlspecialcharshtmlentitiesmysql_real_escape

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

PHP 5.4 未定义索引:argv

python基础-第五篇-5.4正则表达式