未终止的string常见的来源

我试图debugging一个JavaScript脚本,在Firefox扩展中读取并执行。 我只能通过Firebug控制台看到错误(我的代码对Firebug不可见),它报告“未终止的string文字”。

我检查了这条线和周围的线,一切都看起来很好 – 括号,大括号和引号是平衡的,等等。我应该寻找什么其他可能的原因?

大多数浏览器似乎都有这样的代码的问题:

var foo = "</script>"; 

在Firefox,Opera和IE8中,这会导致未终止的string文字错误。 在序列化包含脚本的HTML代码时可能会非常令人讨厌。

寻找线索! 这些往往是原因。

我会投票jamtoday的答案,如果我有“声誉”

如果您的数据是通过PHP的方式,这可能会有所帮助

 $str = str_replace(array("\r", "\n"), '', $str); 

我刚刚发现"<\/script>"似乎和"</scr"+"ipt>"

您可以尝试通过JSLint运行脚本。

只是逃避你的标签closures或使用ascii代码

 <\/script> 

 <&#47;script> 

如果你已经做了任何剪切/粘贴:一些在线语法荧光笔将打破单引号和双引号,把它们变成格式化的引号对(匹配的开关对)。 (我现在找不到任何例子)…所以这需要命令几次,并盯着你的引用字符

尝试不同的字体? 另外,不同的编辑器和IDE使用不同的标记器和高亮规则,JS是parsing更多dynamic语言之一,所以尝试在emacs,vim,gedit(带有JS插件)中打开文件…如果你幸运的话,他们会显示一个长长的紫色string贯穿文件的末尾。

查找一个string,其中包含可能由某些服务器端代码插入的未转义的单个qoute。

你逃脱了你的正斜杠(/)吗? 我以前遇到过麻烦

你有没有试过Chromebug ? 这是扩展的Firebug。

在过去,''''通常来自Word的复制和粘贴。 用普通的单引号(')来代替它们是可行的。

另外请注意,%0A是换行字符的URL编码。 我花了一段时间才发现我的违规代码中有一个换行符。

如果没有什么帮助,找一些像uni-code字符

 \u2028 

这可能会打破你的string在多行,并抛出这个错误

也许这是因为你的PHP代码中有一个换行符。 如果您需要在警报窗口消息中换行,请将其作为PHP代码中每行末尾的转义语法。 我通常这样做:

 $message = 'line 1.\\n'; $message .= 'line 2.'; 

尝试一个“二进制search”。 删除一半的代码,然后再试一次。 如果错误仍然存​​在,请删除其余一半的代码。 如果错误不存在,请将您删除的内容删除,并删除一半。 重复。

你应该能够相当快地缩小到几行。 我的经验是,在这一点上,你会注意到一些愚蠢的畸形的string。

如果您不确定错误在哪个服务器端资源,那么在保存的浏览器HTML输出版本上执行此操作可能会很方便。

网页开发者猜测浏览器使用哪种编码是错误的。 这通常可以通过在页面标题中指定编码来解决。

扫描错误消息提到的行# 之前的代码。 不pipe什么都没有终止,导致下游的东西(归咎于#)被标记出来。

空白是我发现的另一个问题,导致这个错误。 使用函数修剪空白可能会有所帮助。

$ str = str_replace(array(“\ r \ n”,“\ n \ r”,“\ r”,“\ n”),
',stripslashes($ str));

这应该工作。