PHP 5.4抛出异常 – 看不到带有ISO-8859-1编码的字符串消息的消
我最近从apt-get在我的Ubuntu 12.10上安装了
PHP 5.4.
PHP信息显示:PHP版本5.4.6-1ubuntu1 我刚刚安装了所有常见的软件包,如mysql,pgsql,curl等,没有做任何其他更改,但我有一个问题. 我喜欢在我的文件和数据库中使用ISO-8859-1 / latin1编码,因为它是我获得最佳工作流程的地方.现在我有一个问题,因为PHP似乎没有与其消息编码的异常相匹配. 那么,为了更好地澄清一下,我创建了一个这样的测试文件: ini_set('display_errors',1); error_reporting(E_ALL); throw new Exception('é'); 如果上面的代码是在一个utf-8文件,这一切都可以,Xdegub启用我得到: ( ! ) Fatal error: Uncaught exception 'Exception' with message 'é' in /home/henrique/public/teste.php on line 5 ( ! ) Exception: é in /home/henrique/public/teste.php on line 5 Call Stack # Time Memory Function Location 1 0.0002 124212 {main}( ) ../teste.php:0 如果文件在ISO-8859-1中,如果Xdebug已启用,问题只是该消息未显示: ( ! ) Fatal error: in /home/henrique/public/teste.php on line 5 ( ! ) Exception: in /home/henrique/public/teste.php on line 5 Call Stack # Time Memory Function Location 1 0.0002 124436 {main}( ) ../teste.php:0 但是,没有Xdebug,我得到的是这个“非常澄清”的消息: Fatal error: in /home/henrique/public/teste.php on line 5 也许这是Apache内的一个问题,因为当我使用命令行尝试相同的时候,我得到: Stack trace: #0 {main} thrown in /home/henrique/public/teste.php on line 5 Fatal error: Uncaught exception 'Exception' with message '?' in /home/henrique/public/teste.php on line 5 Exception: ? in /home/henrique/public/teste.php on line 5 Call Stack: 0.0002 121256 1. {main}() /home/henrique/public/teste.php:0 消息仍然存在,但是,它是难以辨认,但是在那里… 编辑 我也尝试过Lighttpd 1.4.28,结果是一样的. 编辑2: 尝试使用PHP 5.4内置的服务器,并得到我的终端: [Wed Jun 5 21:32:08 2013] PHP Fatal error: Uncaught exception 'Exception' with message '?' in /var/www/test2.php:9 Stack trace: #0 {main} thrown in /var/www/test2.php on line 9 [Wed Jun 5 21:32:08 2013] 127.0.0.1:55116 [200]: /test2.php - Uncaught exception 'Exception' with message '?' in /var/www/test2.php:9 Stack trace: #0 {main} thrown in /var/www/test2.php on line 9 但是在浏览器中,还是一样的问题.
PHP中的异常消息是一个字符串,就像没有消息给你.
PHP中的字符串是二进制的.这实际上意味着PHP并不关心其中的编码,PHP中的字符串只保留可以以八位字节表示的二进制数据的任何编码(也就是说,8位形成一个单字节,然后是PHP字符串中的一个字符如果使用像$string [10]这样的子字符串访问来访问第11个字符). 因为所有这些都确保你写的消息,但是它将被传递到输出. 所以唯一的区别是如何显示输出.假设您在该异常消息字符串中具有Latin-1编码,并通过您的apache服务器输出,然后在浏览器和浏览器中查看(我们不关心到目前为止的原因)将其显示为UTF-8你会看到这个问号 – diagmond / crystal: . 如果终端将其显示为UTF-8,则同样适用于终端. 或者将输出保存到文件中,然后在编辑器中将该文件打开为UTF-8编码. 那么怎么解决呢?对于您的浏览器,请查看浏览器的文档,了解您的浏览器应该显示当前正在查看的网站的编码.我知道的每个浏览器都有某种菜单,您可以在其中指定.您使用的字符集是commmon,所以即使是较老的浏览器也是这样. 终端同样适用.您可以设置shell的区域设置以及终端的编码.请参阅您正在使用的shell的文档. 对于文本文件,我敢打赌,你现在已经知道如何处理它:检查您的编辑器提供哪些选项. 最后一个注意事项:如果要正确地分析您的服务器返回到包含异常消息输出的请求,则需要使用浏览器的开发人员工具来使服务器的响应标头可见.您可能会看到对以前配置的更改(错误)表示在编码为拉丁文-1时内容为UTF-8编码.如果您不想手动更改浏览器中的编码,请修复该错误.为此,请参阅PHP文档和Web服务器的文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |