人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5のsimple xmlでrssの読み込みを行っているのですが、たまに読み込めないRSSがあります。
どうやら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ポイントぐらいバーンとあげちゃいます。

●質問者: vas-animatum
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:firefox PHP RSS URL XML
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tmasao
●60ポイント

この現象ですが、すでに挙げられた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仕様書の該当箇所を挙げておきます。ご参考まで。

cf. http://www.w3.org/TR/xml/#charsets

◎質問者からの返答

tmasaoさん、ありがとうございます。

原因、解決法、資料すべて明快に示していただいてとても助かりました。

ちょっと今、他の私事で手を離せない状況なのですが、近日中にこのコードを試して見ます。

ほんとうにありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ