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 异常字符集的主要内容,如果未能解决你的问题,请参考以下文章
PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)
PHP 5.4 已废弃 magic_quotes_gpc,PHP安全转义函数详解(addslashes htmlspecialcharshtmlentitiesmysql_real_escape