wake-up-neo.com

Welche Zeichen sind in einem HTML-Attributnamen zulässig?

Welche Zeichen sind im HTML-Attribut name = value pairs für den 'name'-Teil zulässig? ..... Betrachtet man einige gemeinsame Attribute so scheint es, dass nur Buchstaben (az und AZ) verwendet werden, aber welche anderen Zeichen könnten auch erlaubt sein? ... vielleicht Ziffern (0-9), Bindestriche ( -) und Punkte (.) ... gibt es eine Spezifikation dafür?

58
Robinicks

Es hängt davon ab, was Sie mit "erlaubt" meinen. Jedes Tag hat eine feste Liste von Attributnamen, die gültig sind, und in HTML ist die Groß- und Kleinschreibung nicht zu beachten. In einem wichtigen Sinn sind nur diese Zeichen in der richtigen Reihenfolge "erlaubt".

Eine andere Sichtweise besteht darin, welche Zeichen Browser von Browsern als gültigen Attributnamen behandeln. Der beste Rat kommt hier von der Parserspezifikation von HTML 5, die hier zu finden ist: https://html.spec.whatwg.org/multipage/syntax.html#attributes-2

Es besagt, dass alle Zeichen außer Tabulator, Zeilenvorschub, Formularvorschub, Leerzeichen, Solidus, Größer als Vorzeichen, Anführungszeichen, Apostroph und Gleichheitszeichen als Teil des Attributnamens behandelt werden. Persönlich würde ich nicht versuchen, die Edge-Fälle davon zu verschieben.

48
Alohci

Wenn Sie von XHTML sprechen, gelten die XML-Regeln.

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

Namen und Token

[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

Vielleicht fehlt mir etwas, aber ich glaube, dass die Frage auf einer falschen Annahme beruht. In HTML sind Attribute streng definiert gemäß einer festen Spezifikation. Wenn Sie sich Ihre eigenen Attributnamen "zusammenstellen", schreiben Sie kein gültiges HTML mehr. 

10
Daan

Die zulässigen Werte sind unter w3.org aufgeführt. Wenn Sie ein benutzerdefiniertes Attribut hinzufügen, schreiben Sie kein HTML mehr.

4
Quentin

Seitdem diese Frage gestellt wurde, hat sich das Web ziemlich weiterentwickelt. Es ist wahrscheinlich, dass Autoren von Webkomponenten (benutzerdefinierte Elemente) hier landen und versuchen zu erfahren, welche gültigen Namen verwendet werden können, wenn Attribute für benutzerdefinierte Elemente definiert werden.

Hier gibt es einige Antworten, die teilweise richtig sind. Ich werde versuchen, sie zu aggregieren und basierend auf den neuesten Spezifikationen zu aktualisieren.

Erstens können Attributnamen in HTML5 mit den meisten Zeichen beginnen und sind weitaus toleranter als in früheren HTML-Versionen. Die Antwort von @ S.Lott ist für HTML 2 und XHTML korrekt, nicht jedoch für HTML5.

Für HTML5: ( spec

Attributnamen müssen aus einem oder mehreren Zeichen bestehen, die keine Leerzeichen sind: U + 0000 NULL, U + 0022 QUOTATIONSZEICHEN ("), U + 0027 APOSTROPHE ('), U + 003E ÜBERSICHTLICHES ZEICHEN (>), U + 002F SOLIDUS (/) und U + 003D EQUALS SIGN (=), die Steuerzeichen und alle Zeichen, die nicht von Unicode definiert werden In der HTML-Syntax können Attributnamen, auch die für Fremdelemente, mit any geschrieben werden Eine Mischung aus Klein- und Großbuchstaben, bei denen der Name des Attributs von der Groß- und Kleinschreibung abhängig ist: ASCII.

Allerdings sind andere Kommentatoren hier korrekt. Wenn Sie ein Attribut für ein integriertes Element verwenden, das nicht in der Liste der gültigen Attribute enthalten ist, verstoßen Sie technisch gegen die Spezifikation. Browser-Autoren haben jedoch eine große Toleranz dafür, sodass in der Praxis (viel?) Nichts geschadet wird. Viele Bibliotheken nutzen dies, um reguläre HTML-Tags zu verbessern, was zu Verwirrung führen kann, da es technisch kein gültiges HTML ist. HTML5 bietet einen Mechanismus für benutzerdefinierte Daten in Attributen mithilfe der Namenskonvention für Datenattribute.

Diese Regeln unterscheiden sich für benutzerdefinierte Elemente.

Benutzer von benutzerdefinierten Elementen können beliebig beliebige Attribute für ihr Element implementieren. Die Namen der Attribute sind jedoch restriktiver als bei HTML5. Für spec muss der Attributname den Beschränkungen von XML Name folgen:

Die ASCII -Symbole und Satzzeichen sowie eine ziemlich große Gruppe von Unicode-Symbolzeichen werden von Namen ausgeschlossen, da sie als Trennzeichen in Kontexten, in denen XML-Namen außerhalb von XML-Dokumenten verwendet werden, nützlicher sind. Durch die Bereitstellung dieser Gruppe wird diesen Kontexten eine harte Garantie dafür gegeben, was nicht Bestandteil eines XML-Namens sein kann. Das Zeichen # x037E, GREEK QUESTION MARK, wird ausgeschlossen, da es bei der Normalisierung zu einem Semikolon wird, was die Bedeutung von Entitätsverweisen ändern kann.

Namen und Token

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

[7] Nmtoken :: = (NameChar) +

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

Für benutzerdefinierte Elementnamen können Sie also obere/untere alphanumerische Zeichen, den Unterstrich "_", ":" oder ein beliebiges der in der Spezifikation genannten Unicode-Zeichen als Startzeichen und dann "-", Punkte "verwenden. ", alpha etc ... als Körperzeichen.

0
Clayton Gulick