- 締切済み
エラーのあるxmlファイルからの情報取得について
お世話になります。 いまPHPの勉強がてら、趣味も兼ねてウェブサイトを製作しています。 そのなかでパーサーを利用してxmlファイルから情報を取得してサイトに表示させるようにしようとしているのですが、下記のURLのものだけうまくいきません。 http://blog.nicovideo.jp/nicolumn2/atom.xml パーサーが吐き出したエラーは『変な文字が含まれている』というものだったので、エラーの場所を見つけた後に上記のファイルをブラウザ(GoogleCrome)で見てみると、下記のようなエラーがブラウザに表示されていました。 This page contains the following errors: error on line 422 at column 12: Input is not proper UTF-8, indicate encoding ! Bytes: 0x1C 0xEF 0xBD 0x9E Below is a rendering of the page up to the first error. 色々と検索した結果、xmlの受信側ではなく送信側の問題だと考えていますが、このxmlファイルから正常に情報を取得できるサイトがあるので、何らかの方法でこのエラーをクリアできると思い、修正を試みたものの、すべてうまくいきません。 そこで質問なのですが、以下の2点になります。 (1) パーサーがエラーを吐く原因は『送信されてくるxmlに不正な文字列が含まれており、エラーが出力されるのは送信側の問題である』という僕の解釈は問題ないでしょうか? (2) 自分の製作したウェブサイトにこのxmlファイルから正常に情報を取得し表示させる方法はありますでしょうか? よろしくお願いします。 ※ ・利用しているパーサーはmagpierssです。 ・上記xmlファイルから正常に情報を取得しているサイトはgoogleが提供しているサイトです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
(1) その解釈で恐らく問題ないと思います。MagpieRSSは、内部で、PHPの標準関数である、xml_parse関数などを用いていて、 その関数が、不正な文字を見つけるとエラーでこけるのだと思います。 (2) xml_parseに渡す前段階で、不正な文字を消したりする処理が必要になるかと思います。 http://dozo.matrix.jp/pear/index.php?PHP/Liblary/SPL/SimpleXML/mb_convert_encoding こちらの記事(別のPHPの組み込みクラスでの話ですが)のように、文字コードを変更して戻したり、うまいことやらないと取得出来ないと思いますが、他者が作成したプログラムに対して追加処理を自前でかけるのは結構面倒です。 他所で、正常に取得できているサイトは、別のライブラリを使っていたり、Magpieのような組み込みのxml_parseやSimpleXML以外の、 Pear::XML_Unserializerのような、XMLをXMLとして通すのではなくて、文字列として、上から順番にガリガリ読み解くようなライブラリを使っているのかもしれません。 ちなみに、Pear::XML_RSSというRSS取得のためのライブラリもあるようです。 http://pear.php.net/manual/ja/package.xml.xml-rss.php 一度別のRSSリーダーとか、探してみても良いかもしれません。