Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Предполагая, что вы говорите о 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)*

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Во-первых, в 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 имена атрибутов, даже те, что используются для иностранных элементов, могут быть написаны с помощью любых сочетание lower- и прописных букв, которые не соответствуют значению ASCII для имени атрибута.

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

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

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

Символы 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] Имя :: = NameStartChar (NameChar) *

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

[7] Nmtoken :: = (NameChar) +

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

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

Ответ 6

Я хотел бы знать, разрешено ли использовать атрибут, который начинается с '@', например, в моем xsd, у меня будет? Разрешено ли это для NameStartChar из w3.org?

С уважением.