2011-03-16 25 views
25

我是否需要在html属性值内部转义引号?什么字符被允许?我可以在HTML属性值中添加什么值?

这有效吗?

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

检查出最新的HTML5规范的称号属性:http://dev.w3.org/html5/spec/Overview.html#the-title-attribute相信title属性使用CDATA类型这是在这里定义的:http://www.w3.org/TR/html401/types。html#type-cdata – 2011-03-16 02:01:51

+0

只询问&符号:http://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href(来到之前不幸,所以没有笨蛋......) – 2014-02-13 11:37:44

回答

37

如果你的属性值引用(以双引号"开头和结尾),则允许除双引号和&符号之外的任何字符,其必须引用为分别为和&amp;(或等效数字实体参考,&#34;&#38;

您也可以在属性值周围使用单引号。如果你这样做,你可以在属性中使用文字双引号:<span title='This is a "good" title.'>...</span>。为了在此属性值内转义单引号,您必须使用数字实体引用&#39;,因为某些浏览器不支持命名实体&apos;(即not defined in HTML 4.01)。

此外,你还可以创建不带引号的属性,但是,许多进一步限制的字符集,你能够在其内,禁止在属性中使用的空间,='"<>`

查看the HTML5 spec了解更多详情。

+1

要求转义&符号的理由是什么?它能代表什么? – 2014-02-13 11:23:58

+5

嗯,好吧,它是因为&符号本身将被解析为一个实体。 – 2014-02-13 11:39:17

+4

&符号是属性值中的有效字符。该规范禁止“不明确的&符号”,它是(&符号+字母数字字符+分号)的组合,它与任何指定的引用不匹配。 '' - 有效 '' - 无效 – Semra 2015-01-10 22:20:07

3

值可以是任何东西,但你应该逃脱引号(&quot;&apos;),标记分隔符(&lt;&gt;)和符号(&amp;)。

+0

这个看起来不正确(参见其他答案中的规格链接)。 – Christophe 2013-01-13 01:09:37

+0

它似乎并不禁止<, >等等。该规范仅禁止使用&符号。 – arviman 2018-02-13 12:57:24

4

这是有效的。但是,如果你不得不把双引号里面,你将有&quot;这样逃脱:

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

是的,没关系。问题是当你尝试在属性中放置双引号时。像这样:

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

您可以通过使用HTML实体,像这样解决这个问题:

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

下面是使用基于布赖恩·坎贝尔的答案正则表达式,为一个不带引号的最坏的情况下验证功能属性。

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