我有一个关联数组,无论出于何种目的,看起来都没有理由发出警告。整个源代码如下:
<?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/>';
}
对我来说,一切看起来都很好,但当我在浏览器中查看输出时,我会收到以下错误消息:
分析错误:语法错误,意外的T_ARRAY,在/Applications/MAMP/htdocs/wtf2.php的5行中应为")"
我仔细看了看,然后发现在第4行,似乎有一两个尾随空格(一开始我甚至没有多想)。然而,当我复制空白时,将其粘贴到一个新文档中,如下所示(第2行):
<?php
$whitespace = ' ';
print rawurlencode($whitespace);
然后在我的浏览器中查看输出,这就是我看到的:
%C2%A0%20
我会问,"这是怎么做到的?"但我真的不认为这是一个可行的问题。因此,我的实际问题是:这样的空白与其他空白有何不同(尤其是在通过PHP解释器运行时会导致致命错误)?有没有办法防止这种情况在未来发生?
附言:我正在运行PHP 5.3.20版本(通过Mac上的MAMP Pro)。
PPS:为了澄清,当WHITESPACE本身被删除时,代码运行良好
您所拥有的是一个UTF-8编码的非中断空间(%C2%A0
,又名
),它中断了PHP的解析器。这是PHP的一个已知问题,它被标记为"不会修复",因为人们"可能会将此字符用作标识符的一部分"。请参阅请求#38766不间断空格中断解析。
刚刚撞了我大约一个小时,对此我简直疯了。
Notepad++不会显示常规空格和nbsp之间的任何区别。
如果你想知道这个字符是如何进入你的代码的,这就是我的代码:altgr+空间