我已经有这个问题多年了,但不像今天这么频繁。这促使我一劳永逸地提出这个问题。
有时候(今天对于几乎每一个逻辑)我的琐碎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) {}
。
编辑(解决了!): 向下滚动查找解决方案,我自己回答了问题。
答案 0 :(得分:3)
我终于找到了答案。我必须通过反复试验找出我做错了什么。
因此,如果您的代码因隐藏字符而中断,如果您在从UTF-8切换到ISO-8859-1时发现该字符是“”,那么它主要发生在OSX和多个编辑器中(两者都是Sublime Text和Coda for me)这可能是原因:
在许多操作系统中,当您按alt+space
时,您将获得正常空间的不间断空间实例。解析该字符时,许多编程解析器(例如PHP,Xcode)都会失败。
要在Sublime Text中修复它,您需要编辑Preferences / Key bindings - User并添加以下行:
{ "keys": ["alt+space"], "command": "insert_snippet", "args": {"contents": " " } },
请记住,键绑定文件是一个包含对象的数组,如果有更多条目,则需要将,
保留在最后。如果它是最后一个,请删除它。
如果你需要在任何其他编辑器中修复它,只需谷歌“ yourEditor禁用alt空间”。
修改强>
我也注意到与alt+shift+space
相同的行为,因此我在keybinding配置中添加了另一行:
{ "keys": ["alt+shift+space"], "command": "insert_snippet", "args": {"contents": " " } },
:)
答案 1 :(得分:1)
你在不知不觉中粘贴了导致此解析错误的隐藏字符。可能是您复制的代码源,包括剪贴板中的这些隐藏字符。也许您应该使用notepad
去除这些隐藏的字符:
使用sublime text
时,this也可能会有所帮助答案 2 :(得分:0)
我意识到您已经接受了自己的答案,但为了将来参考,我建议您不要将代码保存在编码为UTF-8的文件中。
在编写PHP或任何其他代码时,我只会使用普通的旧ASCII。使用任何其他编码可能会导致意外情况发生 - 正如您已经发现的那样。
即使您的代码生成的输出是您要编码为UTF-8的网页,也请使用ASCII作为代码文件。代码文件的编码和这些代码文件生成的页面编码是两回事。