为什么whitespace会在PHP中导致致命错误?

时间:2013-07-04 04:12:57

标签: php syntax-error whitespace fatal-error

我有一个关联数组,出于所有意图和目的,出现,绝对没有理由抛出警告。整个源代码如下:

<?php
$entries = array(
  array('date' => '2012-08-12', 'change' => '-19'),
  array('date' => '2012-08-13', 'change' => '-21'),  
  array('date' => '2012-08-14', 'change' => '-19'),
  array('date' => '2012-08-15', 'change' => '-17'),
);
foreach ($entries as $entry) {
  print $entry['date'] . ': ' . $entry['change'] . '<br/>'; 
}

对我来说一切都很好,但是当我在浏览器中查看输出时,我收到以下错误消息:

/ strong> /Applications/MAMP/htdocs/wtf2.php 5

解析错误:语法错误,意外的T_ARRAY,期待')' >

我看得更近一点,然后发现在第4行,似乎有一两个尾随空间(起初我甚至没想过两次)。但是,当我复制空格时,将其粘贴到一个新文档中(第2行):

<?php
$whitespace = '  ';
print rawurlencode($whitespace);

...然后在我的浏览器中查看输出,这就是我所看到的:

%C2%A0%20

问,“这是怎么做到的?”但我真的认为这不是一个可行的问题。所以我的实际问题是:像这样的空格与其他任何空格有什么不同(特别是当它通过PHP解释器时会导致致命错误)?有没有办法防止将来发生这种情况?

PS:我正在运行PHP版本5.3.20(在Mac上通过MAMP Pro)。

PPS:澄清一下,当白色字体本身被删​​除时,代码运行得很好。

2 个答案:

答案 0 :(得分:4)

你所拥有的是一个UTF-8编码的非破坏空间(%C2%A0,又名&nbsp;),它破坏了PHP的解析器。这是PHP的一个已知问题,标记为“无法修复”,因为人们“可能会将此字符用作标识符的一部分”。请参阅Request #38766 Nonbreaking whitespace breaks parsing

答案 1 :(得分:0)

只是大约一个小时的时间撞了我头,对此完全疯了。

Notepad ++没有显示常规空格和nbsp之间的任何差异。

如果你想知道这个角色是如何进入你的代码的,那就是我得到的: altgr + space

相关问题