エスケープ問題はややこしい

まず

用語がややこしい.実体参照だのエンティティだのエスケープだのエンコードだの.
実体参照=エンティティ*1であり,数値文字参照 (Numeric character reference) と文字実体参照 (Character entity reference) の二種が存在する(Wikipedia:実体参照)。
エンコードは日本語で言うと「符号化」であり,ウェブに関係するのはまずはURLエンコードだろう.例えば"~"をURLエンコードすると"%7e"である.もう一つHTMLエンコードというものがある(ITmedia記事)."&"を"&"に変換するのがHTMLエンコードだそうな.一方で「それはエンコードじゃない」と言っている人もいる.どっちなんだ?
特別な意味を持っていてそのまま使うことができない文字を使うために特別な書き方をすることを「エスケープ」という.で,"&"はそのまま書けないので"&"と書くのをhtmlエスケープというらしい.

さて

はてなにおけるエスケープ問題だが,はてなアイデアでもいくつかエスケープ不足だとかエスケープしすぎだという報告があったような気がする.ただ,要望文に「エスケープ」という文字列が含まれていれば検索できるが,含まれていなくて関連づけもされてないと探すのが非常に困難である.

閑話休題,ダイアリーの出力するRSSの問題(idea:7696)であるが,どうもtitle記法以外にも不具合があるようだ.

  • ダイアリーに「&」と書くと,ソースでは「&」となるべきだが,「&」のまま(仕様でしょうか?idea:7726として登録)
  • 見出しに「&」と書くと,当該記事のtitle要素も「&」のまま(仕様でしょうか?)
  • RSSのdescriptionではちゃんと「&」と実体参照になっている(これはOK)
  • これをはてなRSSで表示すると,うげ,ソースに「&」がそのまま書かれている(これはidea:7696と同根の不具合)
  • title要素に「&」がそのまま書かれているページを[URL:title]記法で表示すると,ちゃんと「&」と実体参照に変換される(これはOK)
  • そのRSSのdescriptionを見てみると,ちゃんと「&」になっている(これもOK)
  • これをはてなRSSで表示すると,これまたソースに生で「&」と書かれている(これがidea:7696の報告ですね)
  • ダイアリーに「&」と書くと,「&」と表示されてソースでは「&」となっている(当然)
  • そのRSSのdescriptionを見てみると,「&」が「&」に変換されている(まあOKだろう)
  • それをはてなRSSで表示すると,やはりソースに生で「&」と書かれている(これは1番目の現象と同じ).
  • ダイアリーに「&」と書くと,「&」と表示されてソースでは「&」となっている(当然)
  • そのRSSのdescriptionを見てみると,「&」が「&」に変換されている(まあOKだろう)
  • それをはてなRSSで表示すると,うげげげげ,ソースに「&」と書かれているため単に「&」と表示される(上の3つと原因は同じなんだけど,表示上も変わってしまう不具合)

その後トラバ元ダイアリーを見ると,見当違いのテストをしていたことが判明orz. がxmlでは未定義という問題らしい.えっとxmlには詳しくないけど に変換すればいいのかしら?
僕がテストしていた問題は別アイデアとして登録した.

RSSフィードのdescriptionにおいて実体参照になっているもの(例えば&)が,はてなRSSのソースでは元の文字(例えば&)になっている.実体参照のままにすべき.
idea:7725

*1:本当はエンティティ・リファレンスの略だろう