Какие символы разрешены в имени атрибута HTML? - PullRequest
62 голосов
/ 29 мая 2009

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

Ответы [ 5 ]

50 голосов
/ 29 мая 2009

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

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

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

23 голосов
/ 29 мая 2009

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

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

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

[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)*
9 голосов
/ 29 мая 2009

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

2 голосов
/ 30 ноября 2018

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

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

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

Для HTML5: ( spec )

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

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

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

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

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

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

[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] Имена :: = Имя (# x20 Имя) *

[7] Nmtoken :: = (NameChar) +

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

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

2 голосов
/ 29 мая 2009

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

...