2011-03-16 2 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 Я считаю, что название атрибута используется тип CDATA который определен здесь: http://www.w3.org/TR/html401/types.html # type-cdata –

+0

Просит об амперсанде только: http://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href (пришел раньше, к сожалению, так что не обманывать ...) –

ответ

37

Если значение атрибута цитируемого (начинается и заканчивается двойными кавычками "), то допускаются любые символы, за исключением двойных кавычек и амперсандов, которые должны быть указаны как &quot; и &amp; соответственно (или эквивалентные ссылки числовых сущностей, &#34; и &#38;)

Вы можете также использовать одиночные кавычки вокруг значения атрибута. Если вы сделаете это, вы можете использовать буквенные двойные кавычки в атрибуте: <span title='This is a "good" title.'>...</span>. Чтобы избежать одиночных кавычек в таком значении атрибута, вы должны использовать ссылку на числовой объект &#39;, поскольку некоторые браузеры не поддерживают именованный объект, &apos; (который был not defined in HTML 4.01).

Кроме того, вы также можете создавать атрибуты без кавычек, но ограничивает набор символов, которые вы можете иметь в ней гораздо дальше, запретив использование пространств, =, ', ", <, >, ` в атрибуте ,

Для получения более подробной информации см. the HTML5 spec.

+1

Каково обоснование необходимости избегать амперсандов '&'? Что это может означать? –

+5

А, ок, это потому, что сам амперсанд будет разбираться как объект в противном случае. –

+4

Амперсанд является допустимым символом в значении атрибута. Спецификация запрещает «неоднозначный амперсанд», который является комбинацией (амперсанд + буквенно-цифровой символ + точка с запятой), где он не соответствует ни одной из названных ссылок. '' - действительный '' - недействительный – Semra

3

Значение может быть что угодно, но вы должны экранировать кавычки (&quot;, &apos;), теги разделители (&lt;, &gt;) и амперсанд (&amp;).

+0

Это не выглядит правильно (см. ссылку на спецификации в других ответах). – Christophe

+0

он, кажется, не запрещает <, > и т. Д. Спецификация запрещает только амперсанды. – arviman

4

Это действительно. Однако, если вы должны были ставить двойные кавычки внутри, вы должны бежать с &quot;, как это:

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

Нет, вам не нужно, чтобы избежать одинарные кавычки внутри двойных кавычек.

Эта страница определяет действительные атрибуты двускатной тега:

http://www.w3.org/TR/html401/struct/global.html#edef-SPAN

Эта страница определяет допустимые символы разрешены в атрибуте название:

http://www.w3.org/TR/html401/intro/sgmltut.html#attributes

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: \' " = < > ` &.'; 
}, 
Смежные вопросы