Какие символы разрешены в имени атрибута HTML?

Какие символы допускаются в части "имя" в парах " имя атрибута = HTML"? ..... Глядя на некоторые общие атрибуты, выясняется, что используются только буквы (az и AZ), но какие другие символы также могут быть разрешены?... может быть, цифры (0-9), дефисы (-) и периоды (.)... есть ли спецификации для этого?

5 ответов

Решение

Это зависит от того, что вы подразумеваете под "разрешено". Каждый тег имеет фиксированный список имен атрибутов, которые являются действительными, и в HTML они не чувствительны к регистру. В одном важном смысле, только эти символы в правильной последовательности "разрешены".

Другой способ взглянуть на это - то, что символы будут воспринимать браузерами как допустимое имя атрибута. Лучший совет здесь приходит от спецификации парсера HTML 5, которую можно найти здесь: https://html.spec.whatwg.org/multipage/syntax.html

В нем говорится, что все символы, кроме табуляции, перевода строки, перевода формы, пробела, солидуса, знака "больше", кавычки, апострофа и знака равенства, будут рассматриваться как часть имени атрибута. Лично я не стал бы пытаться выдвигать крайние случаи этого.

С тех пор, как этот вопрос был задан, сеть эволюционировала совсем немного. Вполне вероятно, что авторы веб-компонентов (пользовательских элементов) приземляются здесь, пытаясь узнать, какие допустимые имена можно использовать при определении атрибутов для пользовательских элементов.

Здесь есть несколько ответов, которые являются частично правильными, поэтому я попытаюсь объединить их и обновить их на основе последних спецификаций.

Во-первых, в HTML5 имена атрибутов могут начинаться с большинства символов и являются гораздо более разрешающими, чем в предыдущих версиях HTML. Ответ @S.Lott верен для HTML 2 и XHTML, но не для HTML5.

Для HTML5: ( спец.)

Имена атрибутов должны состоять из одного или нескольких символов, отличных от пробелов, U+0000 NULL, U+0022 МАРКА ЦИТАТЫ ("), U+0027 APOSTROPHE ('), U+003E ЗНАК БОЛЬШЕ, ЧЕМ (>), U+002F Символы SOLIDUS (/) и U+003D EQUALS SIGN (=), управляющие символы и любые символы, которые не определены Unicode. В синтаксисе HTML имена атрибутов, даже те, которые относятся к сторонним элементам, могут быть записаны с любым сочетание строчных и прописных букв, которые ASCII не чувствительны к регистру соответствия имени атрибута.

Тем не менее, другие комментаторы здесь верны, когда вы используете атрибут встроенного элемента, которого нет в списке допустимых атрибутов, вы технически нарушаете спецификацию. Тем не менее, авторы браузеров терпимо относятся к этому, поэтому на практике это не приносит (много?) Вреда. Многие библиотеки используют это для улучшения обычных тегов HTML, что вызывает некоторую путаницу, поскольку это технически недопустимый HTML. HTML5 предоставляет механизм для пользовательских данных в атрибутах, используя соглашение об именовании атрибутов данных.

Эти правила отличаются для пользовательских элементов.

Авторы пользовательских элементов могут реализовывать любые атрибуты, которые им нравятся, в их элементах, хотя имена атрибутов более строгие, чем в HTML5. Фактически, спецификация требует, чтобы имя атрибута соответствовало ограничениям имени XML:

Символы ASCII и знаки пунктуации, а также довольно большая группа символов символов Unicode исключаются из имен, поскольку они более полезны в качестве разделителей в тех случаях, когда имена XML используются вне документов XML; предоставление этой группы дает этим контекстам жесткие гарантии того, что не может быть частью имени XML. Символ #x037E, GREEK QUESTION MARK, исключен, потому что при нормализации он становится точкой с запятой, что может изменить значение ссылок на сущности.

Имена и токены

[4] NameStartChar::= ":" | [AZ] | "_" | [az] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [# X10000- # xEFFFF]

[4a] NameChar:: = NameStartChar | "-" | "" | [0-9] | #xB7 | [#x0300-#x036F] | [# X203F- # x2040]

[5] Name:: = NameStartChar (NameChar) *

[6] Имена:: = Имя (#x20 Имя) *

[7] Nmtoken:: = (NameChar) +

[8] Nmtokens:: = Nmtoken (#x20 Nmtoken) *

Таким образом, для пользовательских имен элементов вы можете использовать верхний / нижний буквенно-цифровой символ, подчеркивание "_", ":", двоеточие или любой из символов Unicode, вызванных в спецификации, в качестве начального символа, а затем тире "-", dots ".", альфа и т.д... как персонажи тела.

Предполагая, что вы говорите о XHTML, применяются правила XML.

См. http://www.w3.org/TR/2008/REC-xml-20081126/.

Имена и токены

[4]     NameStartChar      ::=      ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a]    NameChar       ::=      NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5]     Name       ::=      NameStartChar (NameChar)*
[6]     Names      ::=      Name (#x20 Name)*
[7]     Nmtoken    ::=      (NameChar)+
[8]     Nmtokens       ::=      Nmtoken (#x20 Nmtoken)*

Может быть, я что-то упускаю, но я считаю, что вопрос основан на ложном предположении. В HTML атрибуты строго определены в соответствии с фиксированной спецификацией. Если вы "создаете" свои собственные имена атрибутов, вы больше не пишете действительный HTML.

Допустимые значения перечислены на w3.org. Если вы добавите пользовательский атрибут, то вы больше не будете писать HTML.

Другие вопросы по тегам