PHP 5.4抛出异常 – 看不到带有ISO-8859-1编码的字符串消息的消息

前端之家收集整理的这篇文章主要介绍了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服务器的文档.

猜你在找的PHP相关文章