働きたくないゆとりの備忘録

プログラミングとかサーバーとか学んだことをいろいろ書いていきたい。。。

MagpieRSSでInvalid characterエラーが出るときの対処法

スポンサーリンク

PHPでのRSSパーサーとしてMagpieRSSを使用しているのですが、次のようなエラーを吐くことが多々あります。

Warning: MagpieRSS: Failed to parse RSS file. (Invalid character at line 100, column 27)


どうやらxml_parse関数で処理できない不正な文字が含まれているとこのエラーを吐くようなのですが、これの対処法が調べても分からない。

一応、mb_convert_encoding関数を使用することで解決できると記載しているサイトがちらほらあったので試してみたものの全く効果なし。

ということで自力でなんとかしてみた結果がこちら。

rss_fetch.inc内の_response_to_rss関数の冒頭を下記のように変更

function _response_to_rss ($resp) {
    libxml_use_internal_errors(true);
    $xml = simplexml_load_string($resp->results);
    if ($xml === false) {
        $resp->results = preg_replace('/[\x00-\x1f]/', '', $resp->results);
    }
    $rss = new MagpieRSS( $resp->results, MAGPIE_OUTPUT_ENCODING, MAGPIE_INPUT_ENCODING, MAGPIE_DETECT_ENCODING );


ざっくり言うと、エラーを吐いてる時だけ原因と思われるASCII制御文字を削除する処理を追加しました。

自分も完全に理解はできていないのですが、こうすることでエラーの原因を取り除いて正常に処理ができるようです。

今のところ問題なく動いているのでこれでいこうと思います。