どうやらXML内に不正な文字列が存在するようです。
具体例ですとたとえば今現在、はてぶの朝鮮日報のRSSがぶっ壊れています(simplexmlでロードできませんし、firefoxでも表示できません)。
http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fjapanese.chosun.com%2F&sort=hot&threshold=3
以下のurlで論じられている、対処法でもうまくいきませんでした。
http://fladdict.net/blog/2006/06/rssutf8.html
http://fladdict.net/blog/2006/05/hatenatube_3.html#comments
はてぶのRSSは、こういう現象がちょくちょく起きるのですが、PHPでRSSをロードする際の汎用的かつ具体的な対処法がありましたら、ご教授お願いいたします。
解決できたら500ポイントぐらいバーンとあげちゃいます。
この現象ですが、すでに挙げられたURLのエラーが消えてしまっているようなので、おそらくその原因となったと思われる http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fja... を対象として調査した結果を報告します。
これが不正なRSSとなっている原因は、 0x13 というXML内に含めてはいけないバイナリ文字が混入していることに起因しています。
ですから、対処法はすでに挙げられているものと類似の感じ:
$rss_data = file_get_contents("z.rss");
$p = '/[\x00-\x08\x0b\x0c\x0e-\x1f]/';
$result = preg_replace($p, "", $rss_data);
print $result;
と、こうすることで手元ではXMLパーサを通過できるようになりました。
いかがでしょうか?
念のため、XML仕様書の該当箇所を挙げておきます。ご参考まで。
tmasaoさん、ありがとうございます。
原因、解決法、資料すべて明快に示していただいてとても助かりました。
ちょっと今、他の私事で手を離せない状況なのですが、近日中にこのコードを試して見ます。
ほんとうにありがとうございました。