Escape </ in script标签内容

Sop*_*ert 11 html

在HTML中,标签和实体不在<script>标签内解析,并</立即结束标签.从而,

<script><b>fun &amp; things</
Run Code Online (Sandbox Code Playgroud)

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

如果您包含JSON并且希望</在脚本中包含字符,则可以替换它,<\/因为这些字符出现的唯一位置是字符串,并且\/是转换为单个正斜杠的转义序列.

但是,如果你不使用JavaScript,那么这个技巧就行不通了.在我的情况下,我特意试图<script type="math/tex">在源代码中插入一个,以便MathJax处理它.有没有办法逃脱</原始的HTML源代码?(我没有特别需要,</但我正在编写一个通用工具,并希望能够使用任何文本.)

(可以在JavaScript中创建脚本标记并填充它innerText,但我正在使用原始HTML,所以我不能这样做.)

Kam*_*zot 19

我来到这里寻找一种</script>在JavaScript代码中普遍逃脱的方法.

经过一番研究后,我发现如果你试图</script>在JavaScript代码中进行转义,那么它可以安全地嵌入到html <script></script>标签中,你应该</script</scr\ipt或替换</scri\pt.它更安全,因为如果你用它替换它<\/script可能会破坏这样的JavaScript代码:var q = -1</script/.test("script");

小心不要寻找,</script>而是</script因为它</script asdasdas>会像你一样结束你的脚本</script>.

对不起,它对Ben Alpert没有任何帮助.接受的答案是绝对正确的,您需要知道在您的语言中哪些结构是合法的,<script></script>以便知道如何在</script>不制动代码的情况下逃避发生.


Ben*_*enR 9

HTML 规范详细解释了允许的内容以及如何安全地转义内容。特别是考虑到 HTML 的历史,这是一项非常重要的任务。

从 HTML 规范:

为了避免在本节描述的很奇怪的限制,最简单,最安全的办法就是始终难逃“ &lt;!--”是“ &lt;\!--”,“ &lt;script”为“ &lt;\script”和“ &lt;/script”是“ &lt;\/script”当这些序列出现在脚本中的文字(例如,在串、正则表达式或注释),并避免编写在表达式中使用此类构造的代码。这样做可以避免本节中的限制容易触发的陷阱:即,由于历史原因,解析 HTML 中的脚本块是一种奇怪而奇特的做法,在面对这些序列时会不直观。

来源:https : //www.w3.org/TR/html52/semantics-scripting.html#restrictions-for-contents-of-script-elements


Juk*_*ela 8

在HTML中,与XHTML相反,script元素的内容作为纯文本处理,除了结束标记的出现,因此</结束处理并且必须在符合文档的情况下启动结束标记</script>.没有一般机制可以避免这种情况.任何绕过此功能的方法都不可避免地依赖于元素内部使用的"语言"."语言"这个词在这里引用,因为只要你的代码可以解析和处理它,内容就可以是任何东西.

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

  • 脚本标记内的Unicode`\u003c`-like编码不是通用解决方案吗?它是在Rails和Flask中为JSON实现的(我的问题底部的实现链接:http://stackoverflow.com/q/39193510/518169) (2认同)