<< 【再質問22:00/AU不具合】ファイルの... 質問一覧 レンタルサーバー上のPHPプログラ... >>
  • キーワードが設定されていません

  • 0P
simplexml_load_file関数で取り出せないサイトがある

simplexml_load_file関数で取り出せないファイルがあるのですが何故なのでしょうか?
例えばなのですが
http://ocntoday.blogzine.jp/top/whatsday.xml
のサイトです。
又、出来れば取り出す方法があれば教えて頂きたいのですがお願いできないでしょうか?

  1. $rss = @simplexml_load_file('http://ocntoday.blogzine.jp/top/whatsday.xml');
  2. print '<pre>';
  3.   print_r($rss);
  4.   print 'ああ';
  5. print '</pre>';

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。

Qsimplexml_load_file関数で取り出せないサイトがある hayato0210  [03月10日 05時17分] 
┗Re:simplexml_load_file関数で取り出せないサイトがある shimix  [03月10日 09時14分] 
  ┗Re:Re:simplexml_load_file関数で取り出せないサイトがある hayato0210  [03月10日 09時51分] 
    ┗Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある shimix  [03月10日 10時28分] 
      ┗Re:Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある hayato0210  [03月11日 08時07分] 
        ┗Re:Re:Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある shimix  [03月11日 09時16分] 
          ┗Re:Re:Re:Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある hayato0210  [03月12日 11時46分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:simplexml_load_file関数で取り出せないサイトがある

何故かはわかりませんが、記事の文字列中にBOMが紛れ込んでいるようです。

  1. print strpos(file_get_contents('http://ocntoday.blogzine.jp/top/whatsday.xml'), 0xefbbbf);

いったん文字列として取得してBOMを削除すれば問題ないようです。

  1. $file = str_replace(0xefbbbf, '', file_get_contents('http://ocntoday.blogzine.jp/top/whatsday.xml'));
  2. $rss = simplexml_load_string($file);

Re:Re:simplexml_load_file関数で取り出せないサイトがある

ご回答ありがとうございます。
値は取得できているようなのですが文字化けを起こしてしまいます・・・。
xmlがUTF-8のようでしたのでソースをUTF-8(BOM無し)で試してみたのですが駄目でした。

mb_convert_encodingをかけてみたのですが駄目なようです。
shimix様はどの様な環境下で実行できたのでしょうか?
また出来ればUTF-8のソースでも対応できるようにはならないでしょうか?

Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある

「取り出せない」ということだったので、こちらで(エラー抑制を外して)試したのと同じようにsimplexml_load_file()時点でエラー(xmlファイルのURL:1: parser error : Start tag expected, '<' not found)になっていると思ったのですが違うようですね。

>値は取得できているようなのですが文字化けを起こしてしまいます・・・。

それならそうと最初に書いてください。

ブラウザに返している文字コードは何でしょう?ブラウザ側で判断しているエンコードはどうなっていますか?ブラウザ側のエンコードを変えたらどうなりますか?

>mb_convert_encodingをかけてみたのですが駄目なようです。

「駄目なようです」では、何らかのエラーになるのか・変換されないのか・変換結果がおかしいのかさっぱりわかりませんが、例示されたソースではprint_r()しかされてませんよね。何をmb_convert_encodingの第1引数にされているんでしょう?

mb_convert_encoding()は『個別の文字列』に対して行うことになると思いますけど。
 
   http://www.php.net/manual/ja/function.mb-convert-encoding.php
  (第1引数はstringです)

Re:Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある

すみませn・・・。
shimixさんのソースを使って値を取得できたようなのですが
うまく表示できていないということです・・・。

UTF-8でソースを下記、ソースにもUTF-8だということを明記してあります。
ブラウザもUTF-8にしているのですが取得した値を見ると文字化けを起こしております。

mb_convert_encodingの引数は取ってきたxmlです。

Re:Re:Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある

>shimixさんのソースを使って値を取得できたようなのですが
>うまく表示できていないということです・・・。

私は(残念ながら)エスパーではないので「hayato0210さんが何をしたのか」は書いていただかないとわかりません。面倒でしょうが、ちゃんと書いてください。


>ブラウザもUTF-8にしているのですが取得した値を見ると文字化けを起こしております。

>mb_convert_encodingの引数は取ってきたxmlです。 

前のレスでも書きましたが、mb_convert_encodingにはstringしか渡せません。取得したxml(SimpleXMLオブジェクト)を渡した場合にどういう動作をするかは、やったことがないのでわかりません。

#今こちらの環境で試したら、戻り値は「改行コード×2」だけでした。文字化け以前の問題ですね(汗


取得したデータ(utf-8)をそのまま表示(print_rvar_dump)して、ブラウザのエンコードがutf-8なら何もしなくても化けません(phpソース自体はasciiでかまわない)。mb_convert_encodingをカットしてみてください。

なお、SimpleXMLオブジェクトから個々の要素を扱う場合には、出力したい文字コードに合わせて個々にmb_convert_encodingをします・・というのも前回のレスで書きましたね。

  1. <?php
  2. $file = str_replace(0xefbbbf''file_get_contents('http://ocntoday.blogzine.jp/top/whatsday.xml'));
  3. $rss = simplexml_load_string($file);
  4.  
  5. #var_dump($rss); // この出力はutf-8のままになる。
  6.  
  7. foreach ($rss->channel->item as $item) {
  8.   print date('Y/m/d'strtotime($item->pubDate));
  9.   print "" . $item->category . "";
  10.   // title(文字列)をsjisに変換して出力
  11.   print mb_convert_encoding($item->title'sjis''utf-8') . "<hr />"
  12.   }
  13. ?>

Re:Re:Re:Re:Re:Re:simplexml_load_file関数で取り出せないサイトがある

出来ました><
本当にありがとうございました。
又、今回は失礼しました。
【再質問22:00/AU不具合】ファイルの... 質問一覧 レンタルサーバー上のPHPプログラ...