• 締切済み

PHP5でsimple_xml_load_fileするとエラーになっちゃいます。

simple_xml_load_fileを使ってXMLを読み込んでいるのですが、読み込みの時点でエラーが出てしまいます。 Warning: simplexml_load_file() [function.simplexml-load-file]: input conversion failed due to input error, bytes 0xAD 0xB5 0x3C 0x2F ↑こんな感じです。 原因を探ったところ、XMLファイルのデータ中にローマ数字(I、II、・・)があるとこのようになることが分かりました。 ちなみにsimplexml_load_stringを使用してもほぼ同様のエラーが発生しました。 ローマ数字入りのXMLファイルを読み込むことはできないのでしょうか?ご存じでしたら知恵を拝借したいのですが・・・。 ※SAX、DOMでも読み込めず(T_T)

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

回答No.1

いくつか方法があります。 ・XML文書のEncoding指定を、EUC-JPからeucJP-winにする。  <?xml version="1.0" encoding="EUC-JP"?>  →<?xml version="1.0" encoding="eucJP-win"?>  (ローマ数字は13区 NEC特殊文字で、EUC-JPには含まれない文字ですが、eucJP-winには含まれています)。 ・XML文書内のI、IIなどの文字を実体参照化する。  <name>ほげI</name>  →<name>ほげⅠ</name>  <name>ふぉII</name>  →<name>ふぉⅡ</name> #上記は、<>&を全角で書いてますが、適宜半角にしてください。

Dice-K18
質問者

お礼

返事遅くなりました。すいません。 結論としてファイル内容を読み込んで、UTF-8からUTF-8へエンコードをかければそのまま取得することができました。 ありがとうございました。

関連するQ&A

  • PHP5でsimple_xml_load_fileする前に文字コードを変換できますか?

    php5でRSSリーダーを作っています。 simple_xml_load_fileを使ってRSSを読み込んでいるのですが、サイトによって、読み込みの時点でエラーが出てしまいます。 『Warning: simplexml_load_file() [function.simplexml-load-file]: input conversion failed due to input error, bytes 0x87 0x99 0x81 0x4B』 上記のようなエラーが出ます。エラーの出たRSSの文字コードがShift_JISだったので文字コードさえ変換できればうまくいくと思うのですが、simple_xml_load_fileする前に文字コード変換ってできるのでしょうか?ご存知の方いましたらお願いします。

    • ベストアンサー
    • PHP
  • simplexml_load_fileのエラー

    AmazonのAPIを使ったWebサイトを作っていて、simplexml_load_fileを使って外部サーバのXMLを読み込もうとしています。 ローカル・サーバ1ではうまくいきますが、サーバ2ではI/O warning : failed to load external entity となり読み込めません。 3つのサーバで使用しているプログラムは全く同じです。 PHPのバージョン、SimpleXMLのRevisionは下記の通り。 ローカル:5.2.5、1.151.2.22.2.35 サーバ1:5.2.9、1.151.2.22.2.46 サーバ2:5.2.9、1.151.2.22.2.46 調べていると、XML文字列の中に実体参照等パースエラーとなる文字が含まれているとこのようなエラーが出るとのことでしたが、該当するような文字列はありませんし、同じプログラムでも別のサーバであれば取得できるのでその可能性は考え辛いですが、この場合の対処方法として、file_get_contentsで一度文字列として受け取ってから、simplexml_load_stringでパースするとあったので、それも試しました。 しかし、simplexml_load_fileであれば数秒で取得できるものが、file_get_contentsだと4分以上かかりました。 できればsimplexml_load_fileで行いたいのですが、上記のような違いが出る可能性として考えられることは何かありますでしょうか。

    • 締切済み
    • PHP
  • PHPでXMLファイルを読み込みたい

    PHPを使ってxmlファイルを読み込んで、タグの中のデータなどを読み込んだりしたいです。 ですが、自作のxmlファイルだと simplexml_load_file()で読み込めません。xmlファイルの文字コードを色々と変えて試してみましたが、できませんでした。 ちなみに以下のコードは正常に動きました。Yahoo!のxmlファイルです。 $url = "http://rss.weather.yahoo.co.jp/rss/days/5710.xml"; $rss = simplexml_load_file($url); 出力は「【 25日(金) 嶺北(福井) 】 晴れ - 23℃/8℃ - Yahoo!天気・災害」でした。 何度かやるうちにアルファベットは表示できても日本語が表示できないということもありました。 また、xmlファイルをphpのプログラムに作らせたいです。そのときに、simplexml_load_file()で読み込める日本語も含むxmlファイルをphpで作成するプログラムを教えていただけると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP
  • [PHP+XML]PHPで動的に出力するXMLをどのようにして読み込めばいいでしょうか?

    こんにちは、どうしても解決ができなくて困っています。 お助け願います。 DBからデータを取得し成形するなどした結果をXMLで出力できるようにPHPを用意しました。 ブラウザから確認でき、XMLをソース表示しても問題ありません。 次にこれを読み込むPHPを書いています。 simplexml_load_fileなどでXMLファイルを開くことはこれまでにもやっていたので、直接XMLファイル名を記述するところに用意したPHPを指定しました。 結果はエラー。 いろいろ検証した結果、PHPがアクションする前にPHPファイルが開かれてしまっている感じ。 DOMDocumentのload()やloadXML()で読み込む方法もトライしましたが結果は同じ・・・。 根本的に間違ってますか? PHPから吐き出されるXMLを読み込むためにXMLファイルを記述するところにPHPスクリプトを指定すること自体が間違っているようにも思っています。 お手数をお掛けいたしますがお教え願います。

    • ベストアンサー
    • PHP
  • 「Warning: simplexml_load_string() [

    「Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 61: parser error : Entity 'rsaquo' not defined」というようなエラーが出てPHPファイルが実行できません。 simplexml_load_string() はphpのpearのXMLフォルダのUtil.phpの中の関数と思われるのですが、ちゃんと関数があるのにどうしてエラーが出ているのでしょうか。

    • ベストアンサー
    • PHP
  • PHP5のsimplexml_load_fileで取得した結果をファイルに書き込みたい

    よろしくお願いします。 PHP5でSimpleXMLを利用して得られた結果をファイルに書き込む、つまりキャッシュを保存したいのですが、以下のようにやっても作成されるファイルは空のままです。ディレクトリモードは755です。 $url = "http://hoge.co.jp/index.php?a=123"; $cache_file = md5($url); $xml = simplexml_load_file($url); $fp = fopen($cache_file, 'w'); fwrite ($fp, $xml); fclose($fp); どうかご教授よろしくお願いします。

    • 締切済み
    • PHP
  • simplexml_load_fileでのXML

    simplexml_load_fileを使ってXML形式のデータを処理したいのですが、 <YDF xmlns="http://olp.yahooapis.jp/ydf/1.0" firstResultPosition="1" totalResultsAvailable="1" totalResultsReturned="1"> <ResultInfo> <Count>1</Count> <Total>1</Total> </ResultInfo> <Feature> <Id>201210191610_139.73229_35.663613</Id> <Geometry> <Type>point</Type> <Coordinates>139.73229,35.663613</Coordinates> </Geometry> <Property> <WeatherAreaCode>4410</WeatherAreaCode> <WeatherList> <Weather> <Type>observation</Type> <Date>201210191610</Date> <Rainfall>1.65</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201210191620</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201210191630</Date> <Rainfall>0.00</Rainfall> </Weather> </WeatherList> </Property> </Feature> </YDF> $xml = simplexml_load_file(リクエストURL); 上記のレスポンスが返ってきたとして、2番めのDateを取得しようとした場合 $xml->Feature->Property->WeatherList->Weather[1]->Date; では表示する事が出来ませんでした。 なにが原因でしょうか?

    • 締切済み
    • PHP
  • simplexml_load_file() のかわりの simplexml_load_string() がエラーになる

    こんにちわ。 お時間あるかた、どうぞよろしくおねがいします。 現在、RSSを読み込んで、色々な処理をしたいと思っています。 そして、下記のコードを書いたところうまくいきました。 $root = simplexml_load_file($url); ところが、使っているレンタルサーバでは PHP.iniのallow_url_fopenをONにすることが禁止されていることを知ったので、 simplexml_load_string()を使うように、プログラムを書き換えました。(下記抜粋) $response = http($url . $parm); $line = explode("\n" , $response); // HTTPヘッダを消す for ( $i=0 ; $i < 100 ; $i++ ) if ( $line[$i] == "" ) break; // HTTPボディーだけ取得 $xml_str = ""; for ( $i++ ; $i < count($line) ; $i++ ) $xml_str .= $line[$i]; $root = simplexml_load_string($xml_str); こうしたところ、一部のRSSで、Error while parsing the documentが出るようになってしまいました。 いくつか試したところ、amebloのフィードはOKなのですが、他のRSSだとエラーになるようです。 $ret = get_rss("http://feedblog.ameba.jp/rss/ameblo/femiohji"); // OK $ret = get_rss("http://pub.ne.jp/marunohi/?action=rss&type=rss1.0"); // NG というわけで、 simplexml_load_file()のときは動いていたのですが、 simplexml_load_string()にしたらエラーになります。 原因がわからず、行き詰まってしまいました。 よろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • IE7(だけ?)でXMLが表示できない。

    IE7(だけ?)でXMLが表示できない。 お世話になります。 現在、PHP5.2とAJAXでHPを作成しています。 XMLを吐き出すphpのプログラムをOperaブラウザで 表示してできたのですが。 同じphpのプログラムを、IE7ブラウザからURLをたたくと ↓の様なエラーが発生します。 The XML page cannot be displayed Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. -------------------------------------------------------------------------------- テキストの内容に無効な文字が見つかりました。リソース 'http://….php' の実行エラーです。ライン 2、位置 45 <root><ctg_info><ctg_cd>1</ctg_cd><ctg_name> なぜなのでしょうか? 解決策を教えてください。 エンコードに問題があるのでしょうか?? どうかお願いいたします。 XMLを吐き出すphpは↓の通りで、 $dom = new DOMDocument('1.0', 'UTF-8'); …いろいろ中身をdomの要素を追加していく。… print $dom->saveXML(); ちなみに、吐き出されるXMLは↓の通りです。 <?xml version="1.0" encoding="UTF-8"?> <root> <ctg_info> <ctg_cd>1</ctg_cd> <ctg_name>設計</ctg_name> <naiyo_info> <naiyo_cd>1</naiyo_cd> <naiyo_name>仕様打合せ</naiyo_name> </naiyo_info> </ctg_info> </root> ちなみに、phpの $dom = new DOMDocument('1.0', 'UTF-8'); を $dom = new DOMDocument('1.0', 'EUC-JP'); と変更すると、↓のワーニングが出てしまいます。 Warning: DOMDocument::saveXML() [domdocument.savexml]: output conversion failed due to conv error, bytes 0xC0 0xDF 0xB7 0xD7 どうか、お願いいたします。

    • ベストアンサー
    • XML
  • simplexml_load_fileについて

    simplexml_load_fileでrssを読み込んでいるのですが、 rssのxmlファイルが少し特殊でリンクが抜けているitemがあり、 以降ずれ込んで読まれてしまい困っています。 ■xml例 <root> <item> <title></title> <link></link> </item> <item> <title></title> <link></link> </item> <item> <title></title> ←リンクがぬけている </item> <item> <title></title> <link></link> </item> </root> ■php側 抜粋/割愛 $xml = simplexml_load_file($this->xmlPath) or die("ファイルが読み込まれません"); //xpathにて各ノードを取得 $title = $xml->xpath(//title); $link = $xml->xpath(//link); for($i = 0; $i < 3; $i++) { <a href="<?=$link[$i]?>"> <?=$title[$i]?> </a> } のように取得して、html加工して 吐き出しているので、linkがないノードがあると 後のものがどんどんずれて読み込まれてしまいます・・・ どのようにしたら解決できますでしょうか・・・

    • 締切済み
    • PHP