我无法理解转义如何在html标记属性值中运行javascript。
我始终相信你应该永远逃避& '“<>。因此,对于javascript作为属性值我尝试过:
<a href="javascript:alert('Hello');"></a>
它不起作用。但是:
<a href="javascript:alert('Hello');"></a>
和
<a href="javascript:alert('Hello');"></a>
适用于所有浏览器!
现在我完全糊涂了。如果我的所有属性值都用双引号括起来,这是否意味着我不必转义单引号?或者是as和ascii 39技术上不同的角色?这样javascript需要ascii 39,但不是'?
答案 0 :(得分:30)
这里涉及两种类型的“转义”,HTML和JavaScript。解释HTML文档时,首先解析HTML转义。
就HTML而言,属性值中的规则与其他地方的规则相同,另外还有一条规则:
<
。通常<
用于此目的。从技术上讲,根据HTML版本,并不总是需要转义,但它始终是一种很好的做法。&
应该被转义。通常&
用于此目的。这也不总是强制性的,但总是要比学习和记住需要时更简单。"
作为分隔符,则习惯使用"
转义其出现次数,而对于Ascii撇号,实体引用'
仅在某些HTML版本中定义,因此,最安全的方法是使用数字参考'
(或'
)。如果您愿意,可以转义>
(或任何其他数据字符),但绝不需要它。
在JavaScript方面,字符串文字中有一些转义机制(\
)。但这些是一个不同的问题,与您的情况无关。
在您的示例中,在符合当前规范的浏览器上,JavaScript解释器会看到完全相同的代码alert('Hello');
。浏览器已“未转义”'
或'
至'
。我对此感到有些惊讶,'
现在并不普遍支持,但它不是一个问题:很少有任何需要在HTML中转义Ascii撇号(仅在属性值中需要转义,并且仅在您使用时Ascii撇号作为分隔符),当有,你可以使用'
引用。
答案 1 :(得分:1)
'
不是有效的HTML reference entity。您应该使用'
答案 2 :(得分:-2)
如果您的标记用双引号括起来,那么您不必转义单引号是正确的。当我将javascript编码到标签中时(使用jQuery很少见)我逃脱的唯一字符是双引号,浏览器处理剩下的就好了。