言葉遣いに注意―文字参照

3030ito自前のRSSフィード中に、XMLで未定義の使えない文字実体参照が入っていてトラブル発生、というハナシ。


ブログの更新情報をチェックするのには、RSSなどのフォーマットで作られたフィードと呼ばれるデータを利用するのが一般的です。現在使われているブログシステムでは、このフィードへのリンクを利用できるようになっています。

お客様から、自分のブログのカテゴリー別の更新情報を入手したいというご要望がありました。そのブログは全体のRSSフィードは書き出してくれるものの、カテゴリー別のフィードはなかったためです。
そこで、カテゴリー別の表示データからsimple_html_domというスクリプトを利用して、ブログタイトルや日付などの必要な情報を抜き出して独自のRSSフィードを書き出すスクリプトを作成しました。

最近までご要望通りの動作をしていたのですが、ある日を境に更新情報が取れなくなってしまいます。
同じブログの他のカテゴリーでは問題がありませんでしたので、両カテゴリーと比較をしたところ、問題のあるカテゴリーのタイトルで文字実体参照が使われていました。

XMLで定義済みの、使える文字実体参照は
&(&)
&lt;(<)
&gt;(>)
&quot;(")
&apos;(')
の5つ。

なのですが、問題となったタイトルで使われていたのは、&times;で表わされる「×」でした。
ということで、書き出すRSSフィードにDTDで文字実体参照を数値文字参照に定義して対処しました。

!DOCTYPE rdf:RDF [
<!ENTITY times "&#215;" >
]>

文字実体参照と数値文字参照の違い、普段はあまり気にしていなかったけれど、要注意。