转义html标签属性值

时间:2012-02-08 04:42:09

标签: html escaping

我无法理解转义如何在html标记属性值中运行javascript。

我始终相信你应该永远逃避& '“<>。因此,对于javascript作为属性值我尝试过:

<a href="javascript:alert(&apos;Hello&apos;);"></a>

它不起作用。但是:

<a href="javascript:alert(&#39;Hello&#39;);"></a>

<a href="javascript:alert('Hello');"></a>

适用于所有浏览器!

现在我完全糊涂了。如果我的所有属性值都用双引号括起来,这是否意味着我不必转义单引号?或者是as和ascii 39技术上不同的角色?这样javascript需要ascii 39,但不是'?

3 个答案:

答案 0 :(得分:30)

这里涉及两种类型的“转义”,HTML和JavaScript。解释HTML文档时,首先解析HTML转义。

就HTML而言,属性值中的规则与其他地方的规则相同,另外还有一条规则:

  • 应该转义小于号<。通常&lt;用于此目的。从技术上讲,根据HTML版本,并不总是需要转义,但它始终是一种很好的做法。
  • &符号&应该被转义。通常&amp;用于此目的。这也不总是强制性的,但总是要比学习和记住需要时更简单。
  • 用作属性值周围分隔符的字符必须在其中进行转义。如果使用Ascii引号"作为分隔符,则习惯使用&quot;转义其出现次数,而对于Ascii撇号,实体引用&apos;仅在某些HTML版本中定义,因此,最安全的方法是使用数字参考&#39;(或&#x27;)。

如果您愿意,可以转义>(或任何其他数据字符),但绝不需要它。

在JavaScript方面,字符串文字中有一些转义机制(\)。但这些是一个不同的问题,与您的情况无关。

在您的示例中,在符合当前规范的浏览器上,JavaScript解释器会看到完全相同的代码alert('Hello');。浏览器已“未转义”&apos;&#39;'。我对此感到有些惊讶,&apos;现在并不普遍支持,但它不是一个问题:很少有任何需要在HTML中转义Ascii撇号(仅在属性值中需要转义,并且仅在您使用时Ascii撇号作为分隔符),当有,你可以使用&#39;引用。

答案 1 :(得分:1)

&apos;不是有效的HTML reference entity。您应该使用&#39;

进行转义

答案 2 :(得分:-2)

如果您的标记用双引号括起来,那么您不必转义单引号是正确的。当我将javascript编码到标签中时(使用jQuery很少见)我逃脱的唯一字符是双引号,浏览器处理剩下的就好了。

相关问题