Hop step XHTML―ホップ ステップ XHTML

Section 28:文字参照

 XHTML では,特別な意味を持つ文字,および,直接入力できない文字を“&...;”の形で入力すると,Let's begin XHTMLSection 18 で説明した。本節では,これを改めて詳説する。

文字参照

 XHTML を含めた XML には,特定の文字列をほかの文字列に置き換える機構がある。ここでは,特に,文字列から文字へ置き換える機構について解説する。これを,文字参照という。わたしたちは,この文字参照を,

  1. XHTML(XML)にとって特別な意味を持つ文字を文字どおりに入力するため
  2. その文字エンコーディングでそのまま入力できない文字を入力するため
  3. 何らかの理由で,入力できる文字を別の方法で入力するため

に使う。

 1. については,半角不等号「<」「>」およびアンパサンド「&」属性値の中で特別な意味を持ってしまう引用符に対して使うのであった。

 2. については,少し説明が必要であろう。XML の枠組みでは,使える文字(文字セット)は ISO 10646,簡単には世界中の文字である。わたしたちは多くの場合,その一部を直接表現できる文字エンコーディングを使って XHTML 文書を表現している。たとえばシフト JIS では,ISO 10646 にはあるが,直接入力できない文字がある。

 ここで,文字セットは“文字の集合”であるが,文字コードセットは“文字エンコーディング”と同じである。混同しないように注意されたい。

 Unicode のエンコーディング,UTF-8 や UTF-16 を使うとかなりの文字を直接(文字参照を使わず)入力できるが,Unicode に純粋に対応しているテキストエディタは,2005 年 8 月現在,少なく(対応しているテキストエディタとして,EmEditor などがある),UTF-8 や UTF-16 に対応(読み書き)できるといって,Unicode に対応しているとは限らない。

 3. については,メールアドレスを収集されにくくするためにメールアドレスの文字をことさら文字参照で表したりする。

 XHTML では,文字参照の方法として,

  • 文字に対応付けられた名前で参照する
  • ISO 10646 における,文字につけられた番号で参照する

の 2 つがある。前者は Let's begin XHTML で説明した方法で,文字実体参照というのであった。

 以下,それぞれに対して説明していく。

文字実体参照

 文字実体参照では,文字につけられた名前で,その文字を参照する。書式は,

&...;

である。これは,大文字と小文字を区別する。XHTML を使うにあたって知っておくべきなのは,

  • 半角小なり不等号「<」:&lt;
  • 半角大なり不等号「>」:&gt;
  • 半角アンパサンド「&」:&amp;

それから,属性値を記述するときに必要になってくるのが,

  • 半角二重引用符「"」:&quot;
  • 半角単一引用符(アポストロフィ)「'」:&apos;

である。これを使うケースは,たとえば,

<img src="edchoice.gif" alt='Editor&apos;s choice' />

のような場合である。ここで属性値中のアポストロフィをそのまま入力すると,属性値の終わりを意味してしまう。もっとも,この場合,

<img src="edchoice.gif" alt="Editor's choice" />

と書けば文字参照の必要はない。二重引用符の場合も同様である。ただし,次のような場合は,どちらかの記号は参照しなくてはならない。

<a href="./" title="Back to &quot;Editor's room&quot; top page" rel="contents">トップページへ戻る</a>

title 属性を単一引用符でくくれば,属性値中で二重引用符はふつうに使えるが,アポストロフィは参照しなければならない。

 なお,“&apos;”は XHTML から導入されたので,HTML 4 と互換性を保つには,コードによる文字参照(“&#x27;”または“&#39;”)を用いる。

 そのほかの記号類にも,文字実体参照できるものがある。「©」(&copy;),「®」(&reg;),「™」(&trade;)などを紹介した。これらは,シフト JIS の文字エンコーディングでは直接入力できない文字の例である。フランス語・ドイツ語などで使うアクセント付きアルファベットなども,多くの日本語環境からは文字実体参照を用いることになるだろう。Unicode の“Latin-1 Supplement”というグループ(おもにアクセント付きアルファベット)については,Appendix A で一覧表を掲げておく。

 それから,“&nbsp;”で表されるスペースについて再度触れると,これは複数つなげても通常の半角空白のように 1 個にまとめられず,分かち書きで単語間をこのスペースで区切ると折り返し位置の対象にならない。複数のスペースを入れたいときに使えることは容易にわかるが,たとえば次のような利用法もある(というよりこのほうが本来的な利用法だろう)。単位を伴う数値を書くときは,多くの場合その前に空白を入れるが,そこで折り返されるのは好ましくない。そこで,“&nbsp;”を使って,

<p> 日本の総面積は 377899&nbsp;km&sup2; であり,うち本州が 231092&nbsp;km&sup2;,61.2% を占める。</p>

と書けば,“377899”と“km²”(“&sup2;”は上付きの 2 の文字実体参照)の間に空白ができるが,ここが行末にかかってもここでは折り返しされない。同様に,人名においてファーストネームとファミリーネームが折り返しで区切られることを嫌う場合,および,ページ番号を示す“p.”“pp.”と後続するページ番号の間の折り返しを嫌う場合も“&nbsp;”を使えばよい。

 なお,時折話題になる“ハートマーク”の文字実体参照だが,これは“&hearts;”で,「♥」のように出力される。ただし,お使いのシステムのフォントがこのマークを含まないと出力できない。

ISO 10646 のコードによる文字参照

 もうひとつの文字参照の方法では,ISO 10646 における,文字に割り当てられた番号を使う。番号は 10 進数および 16 進数(0,1,2,……,9,a,b,c,d,e,f の次に桁が上がる数えかた;コンピュータで使用する 2 進法と相性がよい)で与える。これは,あくまで ISO 10646 での番号なので,ISO-2022-JP,日本語 EUC,シフト JIS での番号を与えてはならない。

 10 進数で与える場合は,

&#...;

であり,16 進数で与える場合は,「x」がついて,

&#x...;

となる。このときの「x」は小文字である必要がある。16 進数で与える場合の,a,b,c,d,e,f は大文字小文字を区別しない。

 これまでに,アットマーク「@」を“&#x40;”で参照する方法を紹介しているが,これは 16 進数で 40 の番号をもつ文字を参照していることになる。これは,10 進数に直すと 64 なので,“&#64;”でもよい。

 当然,これよりも桁数が増える場合もあるわけで,ひらがなの「あ」の参照は“&#x3042;”になる。

 文字に割り当てられた番号は,たとえば,Unicode のサイトコードチャートをご覧になればよいだろう。ただし,この方法で ISO 10646 の文字を指すことができ,それは XHTML で使える文字だとはいえ,これに含まれる文字をすべて出力できる環境はきわめて少ない。考慮が必要な事項ではある。