我已经有这个问题很多年了,但没有今天那么频繁。这促使我一劳永逸地提出这个问题。
有时(对于几乎每一种逻辑),我的普通PHP代码都会因为解析错误而失败。有时PHP是正确的,但是通常情况下没有错误,当再次编写完全相同的代码时,它可以正常工作。复制和粘贴代码不起作用,必须再次完整地输入代码。
今天,我仔细地把每一个字符都打下来了,就像每行失败了一样,然后删除了旧的,只是为了让脚本工作。例如:
1 foreach ($_POST['data_positions'] AS $k => $v) {
2
3 }在第1行抛出一个解析错误。我将代码跳到第2行,并再次编写完全相同的第1行(我多次检查每个字符是否相同),然后删除第2行,它就能工作了。另一个例子是:
1 if (is_numeric($k)) {
2
3 }在第1行也会失败。当我重新键入它时,它会正常工作。再次复制和粘贴行不起作用。
我百分之百肯定代码是好的,所以它让我相信这是某种编码问题,代码的某些部分被认为是错误的编码(比如将格式化的文本粘贴到电子邮件中)。
我目前使用的是崇高文本(但在Notepad++和以前的Homesite编辑器中也有相同类型的错误解析错误),在OS上运行MAMP,但它也发生在我的Windows桌面机器上。
有人知道我能做什么吗?写几遍代码,然后随机地让它失败,这是非常烦人的。
编辑(重新打开):我仍然无法使它正常工作。不管我是把它粘贴到记事本上,还是从零开始输入一个全新的文件。我已经检查了所有的数据库到服务器到我的编辑器,他们都使用UFT-8。几乎所有的IF-语句都会中断(有时,我必须将它们输入3或4次才能正常工作。琐碎的东西,比如if ($a === 3 || $a === 6) {}。
编辑(解决!):向下滚动的解决方案,我自己回答了问题。
发布于 2014-10-09 08:00:58
我终于找到了答案。我必须通过反复的尝试找出我做错了什么。
因此,如果您的代码因隐藏字符而中断,如果您从UTF-8切换到ISO-8859-1时发现该字符是“”,那么如果它主要发生在OSX和多个编辑器中(对于我来说是崇高文本和Coda ),这可能是原因:
在许多操作系统中,当您按alt+space时,您将得到一个正常空间的非中断空间安装。许多编程解析器(例如PHP、Xcode )在解析该字符时都会失败。
要在崇高文本中修复它,您需要编辑Preferences/键绑定- User并添加行:
{ "keys": ["alt+space"], "command": "insert_snippet", "args": {"contents": " " } },请记住,键绑定文件是一个带有对象的数组,如果有更多的条目,则需要将,保存在末尾。如果是最后一个的话就把它拿掉。
如果您需要在任何其他编辑器中修复它,只需使用谷歌"yourEditor禁用alt空间“即可。
编辑:
我还注意到了alt+shift+space的相同行为,因此我在keybinding配置中添加了另一行:
{ "keys": ["alt+shift+space"], "command": "insert_snippet", "args": {"contents": " " } },:)
发布于 2014-03-06 10:08:59
您正在不知不觉地粘贴导致此解析错误的隐藏字符。它可能是您要复制的代码的源代码,在剪贴板中包含了这些隐藏字符。也许您应该使用notepad删除这些隐藏字符:
此外,当您使用崇高的文本时,这可能会有所帮助。
发布于 2014-10-09 13:49:31
我知道你已经接受了你自己的答案,但为了将来的参考,我不建议把你的代码保存在编码为UTF-8的文件中。
在编写或任何其他代码时,我只会使用普通的旧ASCII。使用任何其他编码都可能导致意外的事情发生-正如您已经发现的那样。
即使您的代码生成的输出是您希望编码为UTF-8的网页,也可以使用ASCII作为您的代码文件。代码文件的编码和这些代码文件生成的页面编码是两件不同的事情。
https://stackoverflow.com/questions/22221042
复制相似问题