【发布时间】:2014-04-08 21:15:22
【问题描述】:
我多年来一直遇到这个问题,但不像今天那么频繁。这促使我一劳永逸地问这个问题。
有时(今天几乎所有逻辑)我的琐碎 PHP 代码会因解析错误而失败。有时 PHP 是正确的,但通常不会出错,并且当再次编写完全相同的代码时,它可以毫无怨言地工作。复制粘贴代码不起作用,必须重新输入完整的代码。
今天,我仔细地输入了每一个字符,完全按照失败的行,然后删除了旧的,只是为了让脚本正常工作。例如:
1 foreach ($_POST['data_positions'] AS $k => $v) {
2
3 }
在第 1 行引发了一个解析错误。我将代码向下移动到第 2 行并再次编写完全相同的第 1 行(我多次检查每个字符是否相同),然后删除第 2 行,它可以工作。另一个例子:
1 if (is_numeric($k)) {
2
3 }
在第 1 行也失败了。当我重新输入它时,它可以工作。再次复制粘贴行不行。
我 100% 确定代码没有问题,因此这让我相信这是某种编码问题,并且代码的某些部分归因于错误的编码(例如将格式化的文本粘贴到电子邮件中)。
我目前正在使用 Sublime Text(但在 Notepad++ 和旧的 Homesite 编辑器中也有相同类型的错误解析错误),在 OS X 上运行 MAMP,但它也发生在我的 Windows 台式机上。
有人知道我能做什么吗?多次编写代码并随机失败,非常烦人。
编辑(重新打开):
我仍然无法让它正常工作。无论我将它粘贴到记事本还是从头开始键入一个全新的文件。我已经检查了从数据库到服务器到我的编辑器的所有内容,它们都使用 UFT-8。几乎总是 IF 语句会中断(有时我必须将它们输入 3 或 4 次才能起作用。琐碎的东西,例如 if ($a === 3 || $a === 6) {}。
编辑(已解决!): 向下滚动查看解决方案,我自己回答了问题。
【问题讨论】:
-
您在不知不觉中粘贴了导致此解析错误的隐藏字符
-
使用十六进制编辑器查找您可能无意中输入的恶意隐形字符。据我所知,如果您使用不受支持的编码(例如 UTF-16),PHP 解释器将无法按原样查找代码和输出文件。
-
这些行号是否存在?可能是一些 unicode “不可见”字符(在奇怪的编辑器中)?
-
@AlmaDo 不,我自己在这里添加它们只是为了澄清。
标签: php parsing syntax-error sublimetext2 sublimetext3