HTML の要素名として解釈される文字2021年12月01日 23時21分

この記事は HTML アドベントカレンダーの 1 日目の分です。


HTML をパースするとき、要素名として扱われる文字の範囲は意外と広大です。最初の 1 文字が ASCII の英字であれば、あとは以下に挙げた文字以外のすべての文字が要素名の一部として扱われます。

  • タブ (U+0009)
  • 改行 (U+000A)
  • フォームフィード (U+000C)
  • 復帰 (U+000D、改行文字の正規化により改行と同じ扱いになる)
  • スペース (U+0020)
  • スラッシュ / (U+002F)
  • 大なり記号 > (U+003E)

日本語文字はもちろん、全角空白まで要素名の一部として扱われるということです。

ただし、これは Web ブラウザがおかしな HTML コードを受け取ったときにどこまでを要素名として扱うかという話であり、Web 製作者がおかしな名前の要素を使ってよいということではありません。カスタム要素の名前にはより厳しい制約が存在し、そこには全角空白は含まれません。

1 文字目だけは ASCII の英字しか使えないと妙に厳しい制約になっていますが、これにより HTML パーサの高速化を図れます。Unicode の文字全体から文字種を判別するのはなかなか大変ですが、ASCII 文字のみ受け付ければよいとなればあらかじめ辞書を作っておくなどの対応が取れるからです。

参考文献