我正在探索HTML5标记器,并对double escape state感到好奇。您可以使用以下命令跳转到此状态:
<script>
<!--<script>script data double escaped</script>-->
</script>
仅供参考,还有(单个)转义状态:
<script>
<!--script data escaped-->
</script>
我还没能找到/计算出单转义和双转义的区别和它的用途吗?此外,在文档的标记化部分中,我没有看到任何使用"\"
字符来转义脚本标记的用法:<\/script>
。我是否遗漏了什么,或者我只是累了;)单/双脚本状态是什么?
编辑
转义脚本标记(<\/script>
)由javascript解析器处理,与HTML解析器没有任何关系。所以..。单/双状态背后的故事是什么?
发布于 2014-05-19 05:58:35
<\/script>
中的\
由8.2.4.17脚本数据小于符号状态规则中的“任何其他”条件处理。随后,由JS解析器对其进行处理。
至于双重转义状态,我想您已经确定它会导致</script>
字符串无法解析为结束脚本标记。这样做的目的可能是迷失在时间的迷雾中。HTML5解析器规则被编写为与真实世界的web内容向后兼容。如果过去的浏览器出于任何原因(甚至作为bug)这样做,并且如果网站开始依赖于这种行为,那么为了允许现代浏览器处理这些网页,双重转义状态处理将需要包括在解析器规则中。
发布于 2018-09-04 07:40:25
当Javascript首次引入时,许多浏览器都不支持它。因此,它们将呈现脚本标记的内容- javascript代码本身。解决这个问题的正常方法是将脚本放入注释中--例如
<script>
<!-- //hide from non-JS browsers
function doSomething() {
var coolScript = "<script>" + theCodeICopied + "</script>";
document.write(coolScript);
}
// And if you forget to close your comment here, things go funnny
-->
</script>
是相对正常的。因此,像这样在注释中编写的脚本可以将脚本标记作为文字字符串写入文档中间。这在今天看起来可能不是很好的风格,但是很久以前也没有太多的DOM。
https://stackoverflow.com/questions/23727025
复制相似问题