web-dev-qa-db-ja.com

HTML属性名に使用できる文字は何ですか?

HTML属性name = valueペアで、「name」部分に使用できる文字は何ですか? .....いくつかの 一般的な属性 を見ると、文字(azおよびAZ)のみが使用されているように見えますが、他にどのような文字を許可することもできますか?...数字(0-9) 、ハイフン(-)、およびピリオド(。)...このための仕様はありますか?

63
Robinicks

それはあなたが「許可する」とはどういう意味かによって異なります。各タグには有効な属性名の固定リストがあり、htmlでは大文字と小文字は区別されません。 1つの重要な意味で、正しいシーケンスのこれらの文字のみが「許可」されます。

もう1つの見方は、ブラウザが有効な属性名として扱う文字です。ここでの最良のアドバイスは、HTML 5のパーサー仕様にあります。HTML5は次の場所にあります。 https://html.spec.whatwg.org/multipage/syntax.html#attributes-2

タブ、ラインフィード、フォームフィード、スペース、ソリッド、大なり記号、引用符、アポストロフィ、および等号を除くすべての文字が属性名の一部として扱われることを示しています。個人的には、私はこれのエッジケースをプッシュしようとはしません。

51
Alohci

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

何か足りないかもしれませんが、質問は誤った仮定に基づいていると思います。 HTMLでは、属性は厳密に 定義 であり、固定された仕様に従っています。独自の属性名を「構成」すると、有効なHTMLを作成できなくなります。

9
Daan

許可される値は w3.org にリストされています。カスタム属性を追加すると、HTMLを記述しなくなります。

2
Quentin

この質問が出されて以来、ウェブはかなり進化しました。 Webコンポーネント(カスタム要素)の作成者が、カスタム要素の属性を定義するときに使用できる有効な名前を学習しようとしてここに上陸している可能性があります。

ここには部分的に正しいいくつかの回答がありますので、それらを集約して、最近の仕様に基づいて更新してみましょう。

まず、HTML5では、属性名はほとんどの文字で始めることができ、以前のバージョンのHTMLよりもはるかに寛容です。 @ S.Lottの答えはHTML 2とXHTMLでは正しいですが、HTML5では正しくありません。

HTML5の場合:( spec

属性名は、スペース文字以外の1つ以上の文字で構成する必要があります。U+ 0000 NULL、U + 0022 QUOTATION MARK( ")、U + 0027アポストロフィ( ')、U + 003E GREATER-THAN SIGN(>)、U + 002F SOLIDUS(/)、およびU + 003D EQUALS SIGN(=)文字、制御文字、およびUnicodeで定義されていないすべての文字。HTML構文では、属性名は、外部要素の名前であっても、 ASCII属性の名前の大文字と小文字を区別しない一致である小文字と大文字の混合.

そうは言っても、ここにある他のコメンターは正しいです。有効な属性のリストにない組み込み要素の属性を使用すると、技術的に仕様に違反します。ただし、ブラウザの作成者はこれに対して多くの許容範囲を持っているので、実際には害はありません。多くのライブラリはこれを利用して通常のHTMLタグを拡張しますが、技術的に有効なHTMLではないため、混乱を招きます。 HTML5は、data-属性の命名規則を使用して、属性内のカスタムデータのメカニズムを提供します。

これらのルールは、カスタム要素では異なります。

カスタム要素の作成者は、要素に任意の種類の属性を実装することができますが、属性の名前は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]名前:: = NameStartChar(NameChar)*

[6]名前:: =名前(#x20の名前)*

[7] Nmtoken :: =(NameChar)+

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

したがって、カスタム要素名の場合、大文字/小文字の英数字、「_」、アンダースコア、「:」、コロン、または仕様で呼び出された任意のUnicode文字を開始文字として使用し、次にダッシュ「-」、ドット「」を使用できます。 "、アルファなど...ボディ文字として。

2
Clayton Gulick