メニューをスキップして本文へ


ここから本文

RSS Aggregator改造版(その2)

  • 2007年4月11日(水) 23:13 (JST)
  • 投稿者:
    mystral-kk
  • 閲覧数
    2,656
GeekLog

RSS Aggregator改造版がGeeklog.jpで動作しない理由がやっと判明した。PHPのxml_parser_create()関数が受け付けるエンコーディングはUTF-8, ISO-8859-1, US-ASCIIの3種類なので,日本語を含むxmlファイルを処理するには,必然的にUTF-8を指定することになる。PHPのバージョンにかかわらず,ソースエンコーディングをUTF-8にするためには,xml_parser_create( 'UTF-8' );とすればよい。

あとはUTF-8以外のフィード(EUC-JPなど)をxml_parse()に喰わせる前に,encoding='foo'を含めてUTF-8に変換してやればよい。この方針で行けば,mb_detect_encoding()などの確実性に欠ける関数を使わなくても済む。

というところまではすぐに思いついたが,PHP4だと文字化けする。フィードデータはまちがいなくUTF-8で与えているのに,どうもxml_parse()がISO-8859-1と決めつけている節がある。なぜ...

ふと,英語版のPHPマニュアルを見ていると,xml_parser_create()のノートにこんなコメントが載っていた。

[quote]

php at stock-consulting dot com (21-Feb-2005 10:47)

Even though I passed "UTF-8" as encoding type PHP (Version 4.3.3) did *not* treat the input file as UTF-8. The input file was missing the BOM header bytes (which may indeed be omitted, according to RFC3629...but things are a bit unclear there. The RFC seems to make mere recommendations concering the BOM header). If you want to sure that PHP treats an UTF-8 encoded file correctly, make sure that it begins with the corresponding 3 byte BOM header (0xEF 0xBB 0xBF)

[/quote]

このメモによると,どうもこの関数は好みがうるさく,PHP4を使ってUTF-8でデータを与えるときにはBOMをつけないとだめなようだ。これをヒントに,フィードデータをUTF-8に変換した後,BOMをつけてからパーサに読み込ませるとあっさり動作する。orz

PHPはマニュアルが充実しているのが長所の1つだが,マニュアル化されていない地雷も数多くある。そういう意味で,マニュアルに付属しているUser contributed notesは貴重な資料であることは間違いない。

これで安心したのも束の間,今度はGeeklog.jpの掲示板のフィードデータをいつのまにか読み込まなくなった。PHP5でも同様。FEED Validatorにかけてみると,不正な文字が含まれているせいでxmlパーサがエラーを起こしている。こういう状況だから,フィードデータを読み込めないのはある意味しかたないと思うが,FirefoxのSageはそんな逆境にもめげずにきちんと読み込んで動作する。

まだまだ修行が足りないようだ。xml_parse()関数を使いながら,エラーをリカバーする方法があるのかもしれないし,だめならxml_parse()系の関数に頼らず自力でパーサーもどきを書く必要があるのかもしれない。SimpleXMLやDOMを使えば簡単だが,PHP4でも動作させるとなるとその方法も採れない。先は長そうだ...

タグ:rss rss_aggregator xml_parse

トラックバック

このエントリのトラックバックURL:
http://mystral-kk.net/trackback.php/20070411231346503
表示形式
コメント投稿

サイト管理者はコメントに関する責任を負いません。

  • RSS Aggregator改造版(その2)
  • 投稿者:daioh_ on 2007年5月 2日(水) 23:13 (JST)

こんにちは

RSS Aggregator改造版ですが 全角の - (だと思う)が - と表示されます
プラウザ(IE6,IE7)の問題ですだと思いますがいかがでしょう

magpierssのpurserならこける場合もあるので 変換してくれているのだと思いますが

(magpierssは 0xAD 0xE0 0xB5 0xD3 混じってなら確実にこけます)

サブメニューをスキップしてフッタへ

ログイン

ログイン

Twitter

[twitter:block all]

過去の記事

土曜日 10-31


日曜日 10-18


土曜日 10-17


金曜日 04-10


木曜日 04-02


火曜日 03-24


日曜日 03-22


土曜日 02-21


木曜日 02-12



ここからフッタ