在html标记属性值内转义
我很难理解转义在javascript的html标记属性值中是如何工作的 我被引导相信您应该总是转义&'“<>。因此,对于javascript作为属性值,我尝试了:在html标记属性值内转义,html,escaping,Html,Escaping,我很难理解转义在javascript的html标记属性值中是如何工作的 我被引导相信您应该总是转义&'“。因此,对于javascript作为属性值,我尝试了: <a href="javascript:alert('Hello');"></a> 它不起作用。但是: <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?
&apos;
是无效的。您应该使用&39;
来转义这里涉及两种类型的“转义”,HTML和JavaScript。在解释HTML文档时,首先解析HTML转义
就HTML而言,属性值中的规则与其他地方的规则相同,另外还有一条规则:
- 少于字符的
(或任何其他数据字符),但这是不需要的 在JavaScript方面,有一些字符串文本的转义机制(带有
)。但这是另一个问题,与您的情况无关\
在您的示例中,在符合当前规范的浏览器上,JavaScript解释器会看到完全相同的代码alert('Hello')代码>。浏览器具有“未缩放”
&apos代码>或
'代码>到
。我有点惊讶于这里的”
现在并没有得到普遍支持,但这不是一个问题:在HTML中很少需要转义Ascii撇号(转义仅在属性值中需要,并且仅当您使用Ascii撇号作为分隔符时才需要),如果需要转义,您可以使用&apos
'代码>参考。好的,我刚刚发现&apos;实际上不是HTML中的引用实体,不管w3schools怎么说()我认为
的定义很好。出于好奇,请您详细说明什么时候需要逃过和什么时候不需要?@RakeshPai,这取决于HTML版本。根据HTML4.01规则,如果紧跟Ascii字母(a-z,a-z)或紧跟数字符号&apos
和Ascii字母,则必须转义与。这是有意义的,因为它会与其他类型的HTML实体冲突。谢谢。假设你想打败XSS,这个建议很糟糕。“转义&、”、'、`、!、@、$、%,(,),=,+,{,},[,和]几乎足够了“正如您引用的文章所述,“上面的所有字符(包括空格字符!)都可以用来打破一个不带引号的HTML属性值”。虽然可能没有任何缺点(性能除外)若要转义所有这些字符,若要扩展HTML属性值中的占位符,只需在属性值周围使用引号就更容易了。#
<a href="javascript:alert('Hello');"></a>