3

我有一个关联数组,出于所有意图和目的,似乎完全没有理由发出警告。完整的源代码如下:

<?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,在第5行的/Applications/MAMP/htdocs/wtf2.php中期待 ')'

我仔细看了看,然后发现在第 4 行,似乎有一两个尾随空格(起初我什至没有考虑过)。但是,当我复制空格时,将其粘贴到一个新文档中,如下所示(第 2 行):

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

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

%C2%A0%20

问,“那一开始是怎么做到的?” 但我真的不认为这是一个可以回答的问题。所以我的实际问题是:这样的空格与任何其他空格有何不同(尤其是在通过 PHP 解释器运行时会导致致命错误的地步)?有没有办法防止这种情况在未来发生?

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

PPS:澄清一下,当空白本身被删除时,代码运行良好。

4

2 回答 2

4

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

于 2013-07-04T04:30:00.707 回答
0

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

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

如果您想知道这个字符实际上是如何进入您的代码的,这就是我得到我的方式:altgr + space

于 2014-10-14T15:35:48.507 回答