双引号的浏览器编码

问题描述 投票:0回答:1

我正在学习字符编码,但现在我有点困惑。

我在 Chrome 和 Firefox 中观察到以下行为。

页面加载后,以下 HTML 代码片段将立即打印

it works

<button onclick="myFunction("hello&quot;)&quot;></button><script>alert('it works')</script><!-- &quot;)">click2</button>

但是,这个在页面加载时不会打印任何内容,并且单击按钮时会引发以下错误:

SyntaxError: Unexpected end of input

<button onclick="myFunction(&quot;hello&quot;)&quot;></button><script>alert('it does not work')</script><!-- &quot;)">click1</button>

我不明白为什么这两个代码片段表现出不同的行为,即使它们仅在

myFunction
输入字符串上有所不同。

具体来说,在第一个片段中,初始引用未编码(

"hello&quot;
),而在第二个片段中,它被编码(
&quot;hello&quot;

请您解释一下好吗? 谢谢你。

javascript html character-encoding html-entities html-encode
1个回答
0
投票

HTML 实体(例如

&quot;
)有两个用途:

  • 允许使用与任何编码兼容的一小部分字符来表达任意 Unicode 字符。这允许在 HTML 文档中插入任何字符,无论其编码如何,并且可以更轻松地键入键盘中不可用的字符(例如,您可以键入

    &copy;
    来获取 ©)。

  • 允许插入在 HTML 中具有特殊含义的字符的文字实例,例如

    <
    (例如,
    <p>you can use &lt;strong&gt; to emphasise text</p>
    )。

在您的示例中,双引号

"
具有特殊含义:表示属性值的开始和结束。如果您想在有歧义的地方输入文字双引号,则需要使用
&quote;
实体。

© www.soinside.com 2019 - 2024. All rights reserved.