たとえばこんなの:
XML Parsing Error: undefined entity
Location: http://d.hatena.ne.jp/contractio/rss
Line Number 222, Column 86: <description> -原文:Im Laufe der menschlichen Entwicklung steigt die soziale Komplexität, das heißt die ...</description>
XML では HTML にあるウムラウトとかの実体が定義されてませんのでエラーになります。なんとかして欲しいっす。対処方法としては、二通り:
前者が無難。最近の Perl ならなんとかなるっしょ。後者の方が実装は楽そうだけど HTML の実体っていっぱいあるから RSS のサイズがでかくなってマズー。ちなみに XML 1.0 の仕様では「non-validating perser は DTD の外部サブセットや外部パラメタ実体を読まなくてよい」ということになっているので、それらの実体定義を別ファイルに切り離すことはできません。
あ、他にも、
- 実体はてきとーな文字(?とか)に置き換えちゃう
- & を全部 & に置き換えちゃう
って手もあるか。後者の方が無難。正しい対処ではないけどエラーで全然読めないよりはマシだし。これなら 1 行追加で対応できそうなので是非やって欲しいです。
以上はてなダイアリーへの要望ということで。よろしくお願いします>id:hatenadiaryさん。
(追記)
XMLは「国際対応」遅れてるの? んー?
ということです。HTML のそのへんの文字を表す実体は全部この形に変換できるので、文字の表現力で HTML に劣るというわけではありません*1。
ああ、それで思い出した。対処法にはもう一つ
というのがあります。正しい対処法の中ではこれが一番簡単かな。ユニコード非対応のスクリプト言語(古いバージョンの Perl とか)でも対応できるし*2。
(追記2) 悪徳商法?マニアックスのRSS(悪の最新情報) も同じ問題を抱えていることが判明。 でエラー。
idトラックバック: