HTMLエンティティ(特殊文字)とエスケープ
HTMLではタグを使う事で多種多様な表現が出来ることを学んだ. その中でタグは<と>で囲むということを学んだが,そもそも「<」や「>」を文字として入力したい場合は どうすれば良いのだろうか? 本ページではこうした問題について解説する
HTMLにおける特殊文字
HTMLにおいて,特殊文字とされている文字は以下の通りである. これらの記号をHTMLタグに関係の無い文字列としてHTMLの中に含めた場合, W3CのValidator がエラーを検出する.
- <(小なり):タグの開始記号
- >(大なり):タグの終了記号
- &(アンパサンド):HTMLエンティティのエスケープ用文字
なぜこれらの記号がエラーになるのかは,HTMLを解釈するブラウザの気持ちになって考えると分かりやすい.例えば, タグの開始記号である<が通常の文字列として許されているとして,以下の文字列について考えてみる.
<p> HTML<HyperText Markup Language>は, Webページを構成する文書フォーマットである </p>
これを書いた人は,<と>を文字列として 記述した.では,Webブラウザはこの文章をどう解釈するのだろうか?
まず,WebブラウザはHTMLファイルを先頭から一文字ずつ読んでいき 「<」を検出すると,「>」までをタグとして認識する(この処理をParse(パース)と呼ぶ).例として,1行目のpタグ をpタグとして解釈するのは,<の後にpという文字があり,その後>でタグが閉じているからである.
それでは,2行目はどうか?先に挙げた規則に沿って解釈すると,<を認識した時点で, 次の>までをタグとして解釈する. すなわち,「HyperText Markup Language」というタグとして認識してしまうのである. さらに見ていくと「HyperText Markup Language」タグの閉じタグ 「</HyperText Markup Language>」がpの閉じタグの前に存在しない. よって,WebブラウザにとってこのHTMLは不正なHTMLとして認識されてしまう.
それでは,HTMLの文章としてこれらの特殊文字を扱いたい場合には,どのようにすればよいだろうか?
エスケープ文字&
こうした疑問に答えるのがエスケープ(Escape)である.これは, ある特定の文字列を決められた文字として扱う という処理である.HTML以外にもほとんどのプログラミング言語でエスケープをサポートしている(ルールは言語によって異なる).
HTMLのエスケープには半角アンパサンド(&)を使う.この記号を使い,<, >を文字列として表示させることができる. 以下に置き換えのルールを示す.
- <(小なり):<(Less Than)
- >(大なり):>(Greater Than)
- &:&(ampersand)
エスケープ文字を使って先程の例を書き換えたものは以下の通りである.
<p> HTML<HyperText Markup Language>は, Webページを構成する文書フォーマットである </p>
これで,<, >の記号はWebブラウザにとって文字列として解釈されるようになる. また,エスケープ&記号自体もエスケープの対象になっているのは,&自体を文字列として扱いたい場合に &もまたエスケープ出来ないとうまく扱うことが出来ないためである.
まとめ
本ページではHTMLエンティティとされる特殊文字を文字列として扱う方法を解説した. 正しいHTMLを書くためには必要な情報なので,最終課題までには覚えておくこと.