未终止字符串文本的常见来源

Common sources of unterminated string literal

本文关键字:常见 文本 终止 字符串      更新时间:2023-09-26

我正在尝试调试一个在Firefox扩展中读取并执行的JavaScript脚本。我只能通过Firebug控制台看到错误(我的代码对Firebug不可见),并且它报告了一个"未终止的字符串文字"。

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

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

var foo = "</script>";

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

寻找换行符!这些往往是原因。

如果我有"声誉",我会投票给jamtoday的答案

如果你的数据是通过PHP来的,这可能会有所帮助

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

我刚刚发现"<'/script>"似乎既有效又"</scr"+"ipt>".

只需转义标签闭包或使用 ascii 代码

<'/script>

<&#47;script>

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

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

如果您进行了任何剪切/粘贴:一些在线语法荧光笔会破坏单引号和双引号,将它们转换为格式化的引号对(匹配的开始和结束对)。 (我现在找不到任何例子)... 所以这需要点击几次 Command-+ 并盯着你的引号字符

尝试其他字体? 此外,不同的编辑器和 IDE 使用不同的分词器和突出显示规则,而 JS 是解析的更动态的语言之一,因此请尝试在 emacs、vim、gedit 中打开文件(使用 JS 插件)... 如果幸运的话,其中一个将显示一条贯穿文件末尾的长紫色字符串。

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

我过去在倾斜引号( ' )上遇到过问题,通常是从 Word 复制和粘贴。 用常规单引号 ( ' ) 替换它们就可以了。

另外,请记住,%0A 是编码的换行符 URL。我花了一段时间才找到我的违规代码中哪里有换行符。

如果没有帮助,请查找一些 unicode 字符,例如

'u2028

这可能会在多行上中断字符串并引发此错误

也许是因为

你的PHP代码中有换行符。如果需要在警报窗口消息中换行,请将其作为转义语法包含在 PHP 代码中每行的末尾。我通常按以下方式进行:

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

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

尝试"二进制搜索"。删除一半的代码,然后重试。如果错误仍然存在,请删除剩余代码的一半。如果错误不存在,请将您删除的内容放回原处,然后删除其中的一半。重复。

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

如果您

不确定错误在哪个服务器端资源中,则对浏览器的 HTML 输出的保存版本执行此操作可能是权宜之计。

网页开发人员猜错了查看器浏览器使用的编码。 这通常可以通过在页面标题中指定编码来解决。

扫描错误消息提到的行 # 之前的代码。任何未终止的内容都会导致下游的某些内容(责备行#)被标记。

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

str = str_replace(array("'r'n","'n'r","'r", "'n"), '<br />', stripslashes($str));

这应该有效。