文字実体参照

名前付き文字参照 (HTML、XML、SGML)

仕様書

HTML における構文

[8] 最初の1文字は、 & です >>7

[9] 最後の1文字は、 ; でなければなりません >>7

[10] ; 以外で終わるものも定義されています >>6 が、 互換性のためのものですから、利用者エージェントは実装しなければなりませんが、 著者は使ってはなりません。

HTML における構文解析

[35] HTML では名前付き文字参照は、次のように構文解析されます >>11

  1. [12] 名前付き文字参照の表から、入力と一致する最長のものを探します。
  2. [13] 一致するものがなかった場合、
    1. [14] 入力が & の後に1文字以上のASCII英数字の後に ; なら、
      1. [36] 構文解析エラーです。
      2. [15] これは名前付き文字参照ではありません。
    2. [37] それ以外なら、
      1. [38] これは名前付き文字参照ではありません。
  3. [16] 一致するものがあった場合、
    1. [17] 属性値の処理中である場合、
      1. [18] 一致した最後が ; 以外の場合、
        1. [19] 一致した文字の次がASCII英数字の場合、
          1. [21] これは名前付き文字参照ではありません。
        2. [20] 一致した文字の次が = の場合、
          1. [23] 構文解析エラーです。
          2. [22] これは名前付き文字参照ではありません。
        3. [31] それ以外の場合、
          1. [25] 構文解析エラーです。
          2. [26] これは名前付き文字参照です。
      2. [32] 一致した最後が ; の場合、
        1. [33] これは名前付き文字参照です。
    2. [24] 内容の処理中である場合、
      1. [27] 一致した最後が ; 以外の場合、
        1. [29] 構文解析エラーです。
        2. [28] これは名前付き文字参照です。
      2. [30] 一致した最後が ; の場合、
        1. [34] これは名前付き文字参照です。

SGML における名前付き文字参照

[1] 名前指定文字参照は、区切られた機能名からなる文字参照。 Named character reference。 (JIS X 4151‐1992 3. (200))

[2] 例えば &#RE; で、機能文字 RE (記録終了) を参照できます。 形としては名前指定実体参照とよく似ていますが、 機能的には異なるので注意が必要です。

RE = 0x0D で、 <!ENTITY RE "&#x0D;"> と定義していたとします。 こうすると、 &#RE; (名前指定文字参照) と &RE; (名前指定実体参照) はどちらも 0x0D を表しますが、 前者は記録終了としての解釈がなされるのに対し、 後者は単なる文字として扱われます。

普段は特に意識する必要はありませんが、 たまに違った振る舞いをする場面が出てくるので注意が必要です。 まあ素人はおとなしく名前指定実体参照を使ってろってことですな。

[4] >>2 但し、区切子又は文脈依存区切子が複数文字ある場合には、2文字目以降には名前指定文字参照は使えないのだそうです。 (8.6 参照。)

[3] ちなみに XML では名前指定文字参照は使えません。

[5] 素の SGML で十六進数文字参照を使いたい時に強引に合法化することが・・・できるのかなあ。

メモ

[41] SGML では一般に曖昧でない場合最後の ; を省略できます。だから例えば HTML&lt</p> という文書断片は妥当です。

[42] しかし、曖昧である場合、例えば &ltABCDEF不当です。

[43] ところが、 ClassicMozillaWinIE のような「伝統的」WWWブラウザは、こういうのまで多めに見て頑張って <ABCDEF と解釈してくれたりします。

[45] しかし SGML parser にはこのような芸当は出来ませんし、新しい Gecko Mozilla>>42 のような場合著者が「意図」したように解釈しません

[46] なお、 XML ではこの ; を省略することは出来ません。

[47] たまに混同されますが、文字参照 (数値文字参照名前文字参照) とは別物です。

[48] 文字実体参照する実体参照。 Character entity reference。

[49] 文字実体参照は普通は一般実体参照です。理論上は引数実体参照である文字実体参照もあり得ますが、そんなのには大して用途も無いので、普通は使いません。

[50] 文字実体参照というのは意味上・機能上の種別ですから、見かけ上は他の実体参照と区別がつきません。

[51] 文字実体は普通、便宜のために文字実体集合などとしてまとめて定義されます。

[44] >>43 Classic Mozilla はそうじゃないかもしれん。少なくても NC 4.01 はこれを「意図したように」 (<ABCDEF) 解釈せずに、正しく (&ltABCDEF) 解釈する。

[52] タグ講座とかには &ltHTML> とかがいっぱいでてきてきもい。

[53] Character References/Entities CHECK! <http://www.kmc.gr.jp/~ranran/browsers/entities.html>

[54] HTML4.0 で使える文字実体参照の表の利用上の注意《「の」の連続》の検証《更に「の」の連続》 <http://homepage1.nifty.com/VET06031/memo/charrefhelp2.html>

[55] Bug 28823 - &QUOT; &AMP; &LT; &GT; and &COPY; are not parsed correctly <https://bugzilla.mozilla.org/show_bug.cgi?id=28823>

[56] HTML 4的には文字実体参照名前大文字小文字の区別をしますが、一部の利用者エージェントは区別をしなかったり、一部の文字実体参照について標準とは異なる大文字小文字の組合わせを認めていたりします。という話とテスト。

[57] >>56 WinIE 6Firefox 1.5の両者が対応している5種類の大文字文字実体参照は、 HTML 5HTML構文解析モードで小文字版と同じ意味に解釈すると規定されました。今のところFirefoxが対応していない (無効にされた?) &TRADE;は含まれていません。

()

[58] >>57 WorldWideWebで最初に&lt;など4種類が実装された時 (1992年?) には、大文字小文字を区別していなかったみたいです。

[59] HTMLXMLで定義済みの文字実体参照は、 DOMを作る際展開されて、参照されていない文字データ文字参照そのものとも区別が付かなくなります。 (EntityReference節点は作られません。)

仕様書:
  1. DOM 1 Entities and the DOM Core <IW:DOM1:"introduction.html#ID-E7C30824">
  2. DOM 2 Entities and the DOM Core <IW:DOM2:"Core/introduction.html#ID-E7C30824">
  3. DOM 3 Entities and the DOM Core <IW:DOM3:"Core/introduction.html#ID-E7C30824">

[60] >>59 元々文字実体参照だったもの (あるいは文字そのものや文字参照だったもの) から作ったDOM (部分) 直列化した時に、 元と同じ文字列に戻るか、別のものになるかはわかりません。 もし (DOM APIからアクセスできなくても、内部情報として) 元の表現がわかるように実装されていれば、元通りに戻るはずです。 しかし、そう実装しなければならないわけではありませんし、 効率等の問題があるので、多くの実装ではそのような余分な情報を保持していないと考えられます。

[61] Jane Doeレンダリング円陣には不具合があって、&sect§にしてしまうようです (要検証)。 ()

[62] WinIE 6 では、

<p>&section</p>

<p>§ion</p>

と同じ DOM になりますが、

<p title="&section">

<p title="&amp;section">

と同じ DOM になります。

(名無しさん 2007-01-06 12:46:38 +00:00)

[63] Firefox 1.5 と Opera 9 はどちらも &amp;section と解釈します。

[64] Emacs/W3: Repository - markup - w3: w3/lisp/w3-vars.el (2007-01-08 19:00:00 +09:00 版) <http://cvs.savannah.gnu.org/viewcvs/w3/lisp/w3-vars.el?rev=1.8&root=w3&view=auto>

    (lcub        . 123)
>
    (rcub        . 125)
>
    (frac56      . "5/6")
    (frac16      . "1/6")
    (frac45      . "4/5")
    (frac35      . "3/5")
    (frac25      . "2/5")
    (frac15      . "1/5")
    (frac23      . "2/3")
    (frac13      . "1/3")
    (frac78      . "7/8")
    (frac58      . "5/8")
    (frac38      . "3/8")
    (frac18      . "1/8")
>
    (agr         . "alpha")

[65] Bug 289938 &#8211; Should use real astral chars (not PUA) for math chars outside the Basic Multilingual Plane (2007-01-24 21:48:28 +09:00 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=289938> (名無しさん 2007-01-24 12:52:34 +00:00)

[66] HTML Entity Character Lookup &#8250; Left Logic (Left Logic 著, 2007-06-15 20:53:42 +09:00 版) <http://leftlogic.com/lounge/articles/entity-lookup/> (名無しさん 2007-06-15 12:03:31 +00:00)

[67] EMail Msg <9307122305.AA40433@stat1.cc.ukans.edu> (2007-07-01 04:58:23 +09:00 版) <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q3.messages/117.html>

[68] EMail Msg <9307122305.AA40433@stat1.cc.ukans.edu> (2007-07-01 04:58:23 +09:00 版) <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q3.messages/117.html>

[69] HTML5 IRC logs: freenode / #whatwg / 20070731 (2007-08-01 21:48:29 +09:00 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20070731#l-32>

[70] Bidi in HTML (Jonathan Rosenne 著, 2007-08-04 12:59:05 +09:00 版) <https://listserv.heanet.ie/cgi-bin/wa?A2=ind9605&L=html-wg&P=4579>

[71] IE-only character entity references (Philip Taylor <excors+whatwg@...> 著, 2007-07-31 01:52:23 +09:00 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/11549>

[72] 職人養成スレッド【2代目】 (2003-07-14 22:01:53 +09:00 版) <http://jbbs.livedoor.jp/computer/5580/storage/1053610548.html>

[73] Character entity reference like strings in 2ch threads (2007-08-04 14:35:19 +09:00 版) <http://suika.fam.cx/www/2007/2ch-entities/>

[74] XML Entity definitions for Characters (2007-12-14 08:17:22 +09:00 版) <http://www.w3.org/TR/2007/WD-xml-entity-names-20071214/>

[75] XML Entity definitions for Characters (2007-12-14 08:17:22 +09:00 版) <http://www.w3.org/TR/2007/WD-xml-entity-names-20071214/>

[76] XML Entity Declarations for Characters (2007-11-28 01:41:16 +09:00 版) <http://www.w3.org/2003/entities/>

[77] Bug 289938 &#8211; Should use real astral chars (not PUA) for math chars outside the Basic Multilingual Plane (2008-03-21 21:24:13 +09:00 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=289938>

[78] Bug 7386 &#8211; XML Parse Error on feeds containing external entities ( 版) <https://www.mozdev.org/bugs/show_bug.cgi?id=7386>

[79] RSS 0.90 Specification ( 版) <http://www.rssboard.org/rss-0-9-0#special_characters> によると、 RSS 0.9 では HTML と同じ文字実体参照が使えたようです。 でも RSS 0.9DTD がない RDF/XML 文書のようですが・・・。 だから整形式にならないと思うのですが。。。

[39] See Cello