HTMLのid属性に日本語は使えるのか

先日、東京五輪ボランティア応募サイトを検証したら予想以上にヤバかった(語彙力)という記事を読んでいたところ、日本語をid属性に使うことが槍玉に挙げられていました。

しかし日本語だろうがギリシャ語だろうがASCII文字だろうが、Unicodeの1文字であることに変わりはありません。最近は多言語対応が十分に進んでおり、今さらASCII文字しかダメなんて時代遅れなこと本当にあるの? と思い少し調べました。

先に結論

id属性に日本語を使うことは何も問題ありません。

調べてみる

件のボランティアサイトは、HTML 5で記述されています。 f:id:ozuma:20181005115319p:plain ということで、W3CのサイトでHTML 5の仕様書を確認してみましょう。現在の最新版は、HTML 5.2です。

id属性

id属性は、DOMのところに記述があります。

ここでid属性の制限は以下のように定義されています。

When specified on HTML elements, the id attribute value must be unique amongst all the IDs in the element’s tree and must contain at least one character. The value must not contain any space characters.

つまり、

  • id属性は一意でなければならない
  • 最低1文字でなければならない
  • 空白文字を含んでいてはならない

以上が制限です。

さて、このような技術文書を読む際は、用語の定義に注意が必要です。ここでは無造作にcharacterという単語が使われていますが、この文書でのcharacterにはどういう制限があるのか、定義の確認が必要です。

HTML 5のcharacterとは

characterの定義は、「2.1.6. Character encodings」に書かれています。

In this specification, the term character, when not qualified as Unicode character, is synonymous with the term Unicode code point.

このように本仕様書では、"character"という用語は、(「Unicode文字」と書かれていない場合は)Unicodeコードポイントを意味すると書かれています。日本語には当然Unicodeコードポイントが割り当てられていますから、characterに該当します。よって、id属性に日本語を使うことは仕様上なんら問題ありません。