web-dev-qa-db-fra.com

Quels caractères sont autorisés dans un nom d'attribut HTML?

Dans les paires d'attributs HTML nom = valeur, quels sont les caractères autorisés pour la partie "nom"? ..... En regardant quelques attributs communs il semble que seules les lettres (az et AZ) soient utilisées, mais quels autres caractères pourraient être autorisés également? -), et des périodes (.) ... y at-il des spécifications pour cela?

58
Robinicks

Cela dépend de ce que vous voulez dire par "autorisé". Chaque balise a une liste fixe de noms d'attributs valides, qui ne respectent pas la casse (HTML). Dans un sens important, seuls ces caractères dans la séquence correcte sont "autorisés".

Une autre façon de voir les choses est de définir les caractères que les navigateurs considèrent comme un attribut valide. Le meilleur conseil ici provient des spécifications de l'analyseur syntaxique HTML 5, qui peuvent être trouvées ici: https://html.spec.whatwg.org/multipage/syntax.html#attributes-2

Il indique que tous les caractères sauf tab, saut de ligne, saut de formulaire, espace, solidus, signe supérieur à, signe de guillemet, apostrophe et signe égal seront considérés comme faisant partie du nom de l'attribut. Personnellement, je ne tenterais pas de pousser les cas Edge de cela.

48
Alohci

En supposant que vous parliez de XHTML, les règles XML s'appliquent.

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

Noms et jetons

[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)*
22
S.Lott

Peut-être me manque quelque chose, mais je crois que la question est basée sur une fausse hypothèse. En HTML, les attributs sont strictement définis selon une spécification fixe. Si vous "créez" vos propres noms d'attributs, vous n'écrivez plus du code HTML valide. 

10
Daan

Les valeurs autorisées sont listées sur w3.org . Si vous ajoutez un attribut personnalisé, vous n'écrivez plus du code HTML.

4
Quentin

Depuis que cette question a été posée, le Web a beaucoup évolué. Il est probable que les auteurs de composants Web (éléments personnalisés) atterrissent ici pour savoir quels noms valides peuvent être utilisés lors de la définition d'attributs sur des éléments personnalisés.

Plusieurs réponses ici sont partiellement correctes, je vais donc essayer de les regrouper et de les mettre à jour en fonction des spécifications récentes.

Premièrement, en HTML5, les noms d'attributs peuvent commencer par la plupart des caractères et sont beaucoup plus permissifs que dans les versions précédentes de HTML. La réponse de @L.Lott est correcte pour HTML 2 et XHTML, mais pas pour HTML5.

Pour HTML5: ( spec

Les noms d'attribut doivent comporter un ou plusieurs caractères autres que les espaces, U + 0000 NULL, U + 0022 MARQUE DE COTATION ("), U + 0027 APOSTROPHE ('), U + 003E GRAND SIGNAL (>), U + 002F SOLIDUS (/) et U + 003D SIGNES EQUALS (=), les caractères de contrôle et tous les caractères non définis par Unicode. Dans la syntaxe HTML, les noms d'attribut, même ceux des éléments étrangers, peuvent être écrits mélange de lettres minuscules et majuscules correspondant à une correspondance ASCII sans distinction de casse pour le nom de l'attribut.

Cela étant dit, d'autres commentateurs ici ont raison, lorsque vous utilisez un attribut sur un élément intégré qui ne figure pas dans sa liste d'attributs valides, vous enfreignez techniquement la spécification. Les auteurs de navigateurs ont beaucoup de tolérance à cela, alors dans la pratique, cela ne nuit pas (beaucoup?). Beaucoup de bibliothèques exploitent cela pour améliorer les balises HTML ordinaires, ce qui crée une certaine confusion, car ce n'est techniquement pas HTML valide. HTML5 fournit un mécanisme pour les données personnalisées dans les attributs en utilisant la convention de dénomination des attributs de données.

Ces règles sont différentes pour les éléments personnalisés.

Les auteurs d’éléments personnalisés sont les bienvenus pour implémenter tous les attributs qu’ils aiment dans leur élément, les noms des attributs étant toutefois plus restrictifs que HTML5. En fait, spec nécessite que le nom de l'attribut respecte les restrictions XML Name :

Les symboles ASCII et les signes de ponctuation, ainsi qu'un groupe assez important de caractères de symbole Unicode, sont exclus des noms car ils sont plus utiles comme délimiteurs dans les contextes dans lesquels les noms XML sont utilisés en dehors de documents XML; fournir ce groupe donne à ces contextes des garanties concrètes sur ce qui ne peut pas faire partie d'un nom XML. Le caractère # x037E, GREEK QUESTION MARK, est exclu car, normalisé, il devient un point-virgule, ce qui peut modifier le sens des références d'entité.

Noms et jetons

[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] Noms :: = Nom (# x20 Nom) *

[7] Nmtoken :: = (NameChar) +

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

Ainsi, pour les noms d’éléments personnalisés, vous pouvez utiliser les caractères alphanumériques supérieur/inférieur, le tiret bas "_", les deux points ou tout autre caractère unicode appelé dans la spécification, comme caractère de départ, puis les tirets "-", points ". ", alpha etc ... en tant que caractères du corps.

0
Clayton Gulick