我正在学习字符编码,但现在我有点困惑。
我在 Chrome 和 Firefox 中观察到以下行为。
页面加载后,以下 HTML 代码片段将立即打印
it works
:
<button onclick="myFunction("hello")"></button><script>alert('it works')</script><!-- ")">click2</button>
但是,这个在页面加载时不会打印任何内容,并且单击按钮时会引发以下错误:
SyntaxError: Unexpected end of input
:
<button onclick="myFunction("hello")"></button><script>alert('it does not work')</script><!-- ")">click1</button>
我不明白为什么这两个代码片段表现出不同的行为,即使它们仅在
myFunction
输入字符串上有所不同。
具体来说,在第一个片段中,初始引用未编码(
"hello"
),而在第二个片段中,它被编码("hello"
)
请您解释一下好吗? 谢谢你。
HTML 实体(例如
"
)有两个用途:
允许使用与任何编码兼容的一小部分字符来表达任意 Unicode 字符。这允许在 HTML 文档中插入任何字符,无论其编码如何,并且可以更轻松地键入键盘中不可用的字符(例如,您可以键入
©
来获取 ©)。
允许插入在 HTML 中具有特殊含义的字符的文字实例,例如
<
(例如,<p>you can use <strong> to emphasise text</p>
)。
在您的示例中,双引号
"
具有特殊含义:表示属性值的开始和结束。如果您想在有歧义的地方输入文字双引号,则需要使用 "e;
实体。