我无法理解在 javascript 的 html 标记属性值中转义是如何工作的。
我被引导相信你应该总是转义 & ' "< > 。所以我尝试将 javascript 作为属性值:
<a href="javascript:alert('Hello');"></a>
这是行不通的。然而:
<a href="javascript:alert('Hello');"></a>
和
<a href="javascript:alert('Hello');"></a>
适用于所有浏览器!
现在我完全糊涂了。如果我所有的属性值都用双引号括起来,这是否意味着我不必转义单引号?或者 apos 和 ascii 39 在技术上是不同的字符?这样 javascript 需要 ascii 39,但不需要 apos?
最佳答案
这里涉及两种类型的“转义”,HTML 和 JavaScript。解释 HTML 文档时,首先解析 HTML 转义符。
就 HTML 而言,属性值内的规则与其他地方的规则相同,外加一条附加规则:
- 小于号
<
应该逃脱。通常<
用于此。从技术上讲,根据 HTML 版本,并不总是需要转义,但这一直是一种很好的做法。 - 符号
&
应该逃脱。通常&
用于此。这也不总是强制性的,但总是这样做比在需要时学习和记住要简单。 - 用作属性值周围分隔符的字符必须在其中转义。如果使用 Ascii 引号
"
作为分隔符,通常使用"
来转义它的出现而对于 Ascii 撇号,实体引用'
仅在某些 HTML 版本中定义,因此使用数字引用最安全'
(或'
)。
你可以逃脱>
(或任何其他数据字符)如果你喜欢,但它永远不需要。
在 JavaScript 方面,字符串文字中有一些转义机制(使用 \
)。但这些是不同的问题,与您的情况无关。
在您的示例中,在符合当前规范的浏览器上,JavaScript 解释器看到完全相同的代码 alert('Hello');
.浏览器已“未转义”'
或 '
至 '
.听到这个我有点惊讶 '
这些天并没有得到普遍支持,但这不是问题:很少需要在 HTML 中转义 Ascii 撇号(仅在属性值内需要转义,并且仅当您使用 Ascii 撇号作为其分隔符时),并且当有, 您可以使用 '
引用。
关于html - 在 html 标签属性值中转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187946/