101

可能な重複:

HTMLのid属性に有効な値は何ですか?

アンダースコアは問題ないようです。ダッシュはどうですか?その他の特殊文字

5 답변


106

実際にはHTMLとXHTMLの間に違いがあります。 XHTMLはXMLなので、XML IDの規則が適用されます。

タイプIDの値は、名前の生成と一致しなければなりません。

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]

NameChar     ::=      NameStartChar | "-" | "." | [0-9] | #xB7 |
                        [#x0300-#x036F] | [#x203F-#x2040]

ソース:拡張マークアップ言語(XML)1.0(第5版)2.3

HTMLの場合、以下が適用されます。

id =名前[CS]

この属性は要素に名前を割り当てます。この名前はドキュメント内で一意である必要があります。

IDとNAMEのトークンは、で始まる必要があります。   手紙([A-Za-z])そして続くかもしれない   任意の数の文字、数字による   ([0-9])、ハイフン( " - ")、アンダースコア   ( "_")、コロン( ":")、およびピリオド   ( "。")

ソース:HTML 4仕様第6章IDトークン


  • 重要なことに、これはXML名がHTML名のスーパーセットであることを意味します。つまり、任意の有効なHTML名も有効なXML / XHTML名です。 - Ben Blank
  • IDの内側にピリオドとコロンを使用してCSSまたはjQueryを使用しようとしている人にとっては、不可能になります。しかし、これはハッキングに向けた素晴らしい方法です。 - Dan
  • @あなたはいつでも「エスケープ」することができます。および":"バックスラッシュを使用してjqueryで... - Bor691
  • 正規表現と同等のもの/^[a-z]+[a-z0-9\-_:\.]*$/i。 - Gajus
  • @GajusKuizinas ...ただし、ユーロ中心でASCII文字しか受け付けていない場合に限ります。これらの「gobbeldygook」のような文字範囲[#xF900-#xFDCF]正規表現では許可されていない、名前に使用できる有用なUnicode文字を表します。 - Phrogz

22

W3Cの仕様基本的なHTMLデータ型と言う"IDとNAMEのトークンは文字([A-Za-z])で始まらなければならず、その後に任意の数の文字、数字([0-9])、ハイフン(" - ")、アンダースコア(")を続けることができます_")、コロン(": ")、およびピリオド("。 ")。


  • 実際には、":"のサポートXHTML文書のXML名前空間のせいで混乱しています。使わないようにするのが賢明です。 - Dan Davies Brackett
  • 特にこれはIDにスペースを含めることができないことを意味することに注意してください。そうしないと< div id =" my thing>このCSSルールに一致しません。#my thing {color:red} - aem
  • ありがとう。 CSSやJSと対話するとき、これらのことのどれかが混乱しますか? CSSがドットやコロンと混同されることがありましたが、JSではダッシュをうまく処理できないことがわかりました。 - Josh Gibson
  • 同様に、JSとCSSのAPIが定義されている場合は、ピリオド文字がよく考慮されないため、同様に避ける必要があります。 - Dan Davies Brackett
  • これらの制限はHTML5で解除されました。見るmathiasbynens.be/notes/html5-id-class。 - Mathias Bynens

8

私たちがあなたの質問の題名を文字通りに取るならば、HTMLもXHTMLの規則も適用されません。代わりに、関連する仕様はDOMです。

私たちの情報源としてDOM Level 3を取り上げ、「DOM ID」によって「ID」フラグが設定された属性を意味すると仮定すると、その値は「DOMString」になり、その文字は任意のUTF-16エンコード可能文字になります。

16ビット単位

DOMStringの基本単位。これはDOMStringでのインデックス付けを示しています   16ビット単位で発生します。これは   それを意味すると誤解しないでください   DOMStringは任意の16ビットを格納できます   単位DOMStringは文字です   UTF-16でエンコードされた文字列。これの意味は   UTF-16の制限は   他の関連するものと同様   文字列に対する制限   維持されます。単一の文字、   数値形式の例   文字参照、に対応する可能性があります   1つか2つの16ビット単位。

もちろん、これはおそらくあなたが望むものではない、そしてそのルートヴィヒWeinzierlの答えはあなたが探していたものである。ただし、すべてのDOMをHTMLまたはXHTMLとしてシリアル化できるわけではなく、DOMには独自の一連の規則があることを理解するのが賢明です。


5

HTML 4.0の仕様によると

IDおよびNAMEトークンは文字([A-Za-z])で始まり、その後に任意の数の文字、数字([0-9])、ハイフン( " - ")、アンダースコア( "_")を続けることができます。 、コロン( ":")、およびピリオド( "。")。



2

xhtmlとも呼ばれる有効なHTMLの目的のためには、Philippeが正しいです。 id属性にスペースや特殊文字(エスケープが必要なものは間違いありません)はありません。 52文字のアルファベット、大文字と小文字、数字0〜9、ハイフン( " - ")、アンダースコア( "_")、コロン( ":")、およびピリオド( "。")

リンクされた質問


関連する質問

最近の質問