在脚本标签内容中转义 </

新手上路,请多包涵

在 HTML 中,标记和实体不会在 <script> 标记内被解析,并且 </ 立即结束标记。因此,

 <script><b>fun &amp; things</

将为您提供一个包含确切内容的脚本标签 <b>fun &amp; things

如果您包含 JSON 并且想要在脚本中包含字符 </ ,那么您可以将其替换为 <\/ 因为这些字符出现的唯一位置是在字符串中, 和 \/ 是一个转义序列,可以变成一个正斜杠。

但是,如果您不使用 JavaScript,那么这个技巧就不起作用。在我的例子中,我试图将 <script type="math/tex"> 插入到源中,以便 MathJax 处理它。有没有办法在原始 HTML 源代码中转义 </ ? (我没有特别需要 </ 但我正在编写一个通用工具并希望能够使用任何文本。)

(可以在 JavaScript 中创建脚本标签并填充其 innerText ,但我使用的是原始 HTML,所以我不能这样做。)

原文由 Sophie Alpert 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 315
2 个回答

在 HTML 中,与 XHTML 相反, script 元素的内容被处理为纯文本,除了出现结束标记,因此 </ 结束处理并且必须符合文档,开始结束标记 </script> 。没有避免这种情况的通用机制。任何规避此功能的方法都不可避免地依赖于元素内部使用的“语言”。 “语言”一词在这里用引号引起来,因为内容可以是任何东西,只要您的代码可以解析和处理它即可。

所以:没有通用机制,但对于 JavaScript 或某些浏览器识别的少数其他客户端脚本语言以外的内容,您可以制定自己的规则。

原文由 Jukka K. Korpela 发布,翻译遵循 CC BY-SA 3.0 许可协议

我来这里是为了寻找一种在 JavaScript 代码中普遍转义 </script> 的方法。

经过一些研究,我发现如果你试图在 JavaScript 代码中逃脱 </script> ,那么它可以安全地嵌入到 html 中 <script></script> 标签之间将 </script 替换为 </scr\ipt 。这样做更安全,因为如果您将其替换为 <\/script 您可能会像这样破坏 JavaScript 代码: var q = -1</script/.test("script");

在所有的 s,c,r,i,p,t 字母中,只有 \i 在 JS 中的字符串和正则表达式文字中没有特殊含义,因此这是您可以在 </script 中安全替换以进行转换的唯一字符有效的 JS 代码,这样它就不会改变其含义。

Be careful not to look for </script> but rather </script because </script asdasdas> will end your script just as well as </script> does.

抱歉,它对 OP 没有任何帮助。接受的答案是绝对正确的,您需要知道您的 <script></script> 中的语言中哪些构造是合法的,以了解如何在不中断代码的情况下逃脱 </script> 发生。

原文由 Kamil Szot 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题