考虑以下 html 文档:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
alert("Hello")
</script>
</head>
</html>
在 Firefox、Safari 和 Chrome 中打开的结果在我的 macbook 中是相同的:一条警告消息显示“Hello”。我正在阅读此答案以尝试了解浏览器的行为。主要部分是:
由于标签的内容被视为 CDATA,因此内容不会被解析,您可以在内容中存储不带引号的 XML 或 HTML(只要您从未
</script>
在内容中放置标签,因为这会关闭您的元素)。
让我们试试当我们在 Firefox 中看到源代码时会发生什么:
它显示的浏览器中的输出是")
因为它认为脚本标记已在警报中关闭。如果我们真的非常想展示,克服这个问题的一种方法"</script>"
是:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
alert("<"+"/script>")
</script>
</head>
</html>
现在 Firefox 明白了:
问题:
解析器检查是否</script>
是结束部分非常简单。检查这一点确实需要更多时间,但它是可行的(在遇到 之前计算引号的数量</script>
。如果是偶数则它是结束标签,否则继续寻找结束标签)。问题是,这是我们不能"</script>"
在 javascript 中编写的规则吗?如果是这样,还有哪些我可能不知道的微妙规则?
说 php 解析器也是如此。<?php echo "?>" ?>
. 我已经对此进行了测试,并且 php 似乎知道真实?>
的位置。