代码(jsFiddle):
<script>
function f(input) {
return '<article>' + input + '</article>';
}
document.write(f('<script>alert(1)<\/script>')); //alert 1
document.write(f('<script>alert(1)<\/script>')); // write normal text
</script>
在我看来,<script>alert(1)<\/script>
与 <script>alert(1)<\/script>
相同(原始代码与http实体代码),但结果不同,任何人都可以解释一下吗?
最佳答案
它们不一样。 <
是实际的<
字符,在 HTML 中是标签的开头。 <
是我们用于 <
的 HTML 命名字符实体当我们想要真正拥有 <
时在文本中,否则我们无法这样做,因为......它开始一个标签。
所以<script>
是 script
的开头标签,而 <script>
就是我们如何放置字符 <
, s
, c
, r
, i
, p
, t
, >
在 HTML 中。
忘记document.write
和script
标签,只需查看 HTML 本身:
这个:
<div>Testing 1 2 3</div>
...是 div
的标记包含文本 Testing 1 2 3
的元素.
相比之下,这个:
<div>Testing 1 2 3</div>
...是 <
的标记字符(作为文本)后跟 div>Testing 1 2 3
接下来是另一个 <
字符(作为文本)后跟 /div>
.
关于javascript - 对 HTML 实体代码和原始代码之间的区别感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528221/