HTML属性值可以放置哪些值?

31

在HTML属性值中,我是否需要转义引号?有哪些字符是允许的?

下面的代码是合法的吗?

<span title="This is a 'good' title.">Hi</span>

请查看最新的HTML5规范中的title属性:http://dev.w3.org/html5/spec/Overview.html#the-title-attribute 我相信title属性使用了在这里定义的CDATA类型:http://www.w3.org/TR/html401/types.html#type-cdata - Bryan Downing
仅询问关于“&”符号:https://dev59.com/anA65IYBdhLWcg3wqAWt(很遗憾,这个问题之前已经出现过了,所以不算重复...) - Ciro Santilli OurBigBook.com
6个回答

47
如果您的属性值被引用(以双引号"开头和结尾),则允许使用除双引号和ampersands之外的任何字符,这些字符必须分别用&quot;&amp;引用(或等效的数字实体引用&#34;&#38;)。
您还可以在属性值周围使用单引号。如果这样做,您可以在属性中使用文字双引号:<span title='This is a "good" title.'>...</span>。为了在此类属性值中转义单引号,您必须使用数字实体引用&#39;,因为某些浏览器不支持命名实体&apos;(它在HTML 4.01中未定义)。
此外,您还可以创建没有引号的属性,但这将限制您可以在其中使用的字符集,禁止使用空格、='"<>`
有关更多详细信息,请参见HTML5规范

1
需要转义和号 & 的原因是什么?它可以代表什么? - Ciro Santilli OurBigBook.com
5
啊,好的,这是因为否则会将“&”解析为实体。 - Ciro Santilli OurBigBook.com
5
&符号在属性值中是有效的字符。规范禁止出现“含糊不清的&符号”,即(&符号+字母数字字符+分号)的组合,如果它不匹配任何已命名的引用。<a title="foo & bar"> - 合法 <a title="&foo;"> - 不合法 - Semra
花式引号怎么办,例如“-在常规引用属性中放置这些引号是否可以?我尝试了一下,它似乎可以(至少在Chrome中),并通过了w3c验证器。诚然感觉有点不好! - Codemonkey
1
@Codemonkey,花括号引号没问题。在HTML中,唯一具有特殊含义的是直引号。可以在属性值内使用花括号引号,并使用任何类型的直引号作为分隔符。 - Brian Campbell

4

那是正确的。但是,如果你需要在内部使用双引号,你必须用&quot;进行转义,就像这样:

<span title="This is a &quot;good&quot; title.">Hi</span>

3
该值可以是任何内容,但您应该转义引号(&quot;&apos;),标记分隔符(&lt;&gt;)和&符号(&amp;)。

这看起来不太对(参见其他答案中的规格链接)。 - Christophe
似乎不禁止使用<, >等符号。规范只禁止使用&符号。 - arviman

3

1

没问题。问题在于当你尝试在属性中放置双引号时,就像这样:

<span title="This is a "bad" title.">Hi</span>

您可以通过使用HTML实体来避免这种情况,如下所示:

<span title="This is a &quot;good&quot; title">Hi</span>

0

这里是一个验证函数,使用基于Brian Campbell的答案的正则表达式,用于最坏情况下的未引用属性。

validator: function (val) {
  if (!val || val.search(/['"=<>`]+|(&\s)+/) === -1) return true;
    return 'Disallowed characters in HTML attributes: \' " = < > ` &.';
},

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接