UTF-8のXMLがSJISのPHPで文字化け

このQ&Aのポイント
  • 携帯サイト用にShift-JISで書いたPHPページにて、UTF-8の外部XMLファイルをロードしている際に文字化けが発生してしまいます。
  • 文字コードの設定変更権限がないため、ソースコードレベルでの解決策を探しています。
  • PHPに詳しくないため、具体的なソースコードのヒントを教えていただけると助かります。
回答を見る
  • ベストアンサー

UTF-8のXMLがSJISのPHPで文字化け

携帯サイト用にShift-JISで書いたPHPページにて、以下のように外部XMLファイル(UTF-8)をロードしていますが文字化けしてしまいます。 <?php $list = simplexml_load_file('test.xml'); echo ($list->data[0]->name); echo ($list->data[0]->tel); echo ($list->data[0]->address); ?> 各ファイルの文字コードはそのままで、文字化けせずにデータを表示することは可能でしょうか?php.iniなどの設定変更をする権限もないので、ソースコードレベルでの解決策を探しています。 勉強不足で恐縮ですが、私はPHPに詳しくないため、なるべく具体的なソースコードをご提示いただいた上で対策をご教授いただけると助かります。 以上、よろしくお願いいたします。

  • kjn
  • お礼率66% (6/9)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

文字コードを変更すればいけますね。 <?php $list = simplexml_load_file('test.xml'); echo mb_convert_encoding($list->data[0]->name,"SJIS","UTF-8"); echo mb_convert_encoding($list->data[0]->tel,"SJIS","UTF-8"); echo mb_convert_encoding($list->data[0]->address,"SJIS","UTF-8"); ?>

kjn
質問者

お礼

まちがえて補足にお礼を書いてしまいました・・・。

kjn
質問者

補足

早速ありがとうございます! お陰さまでうまくいきました。本当に助かりました。 自分でもしっかり勉強したいと思います。 ありがとうございました。

関連するQ&A

  • 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
  • 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
  • [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
  • PEAR:XMLで文字化け

    Amazon ECS4.0を使ってショッピングサイトを作っているところです。 そのために、XMLデータから必要な情報を取りだすために、PEAR:XMLを使っているのですが、 取り出した情報の日本語が文字化けしてしまいます。 PHP5が使えないレンタルサーバーを利用しているため、SimpleXMLは使えません。 あるサイトでPEAR:XMLはマルチバイト文字に対応していないという記述を見つけたのですが、そのせいでしょうか? もし、何か対策があればと思い質問させていただきました。 アドバイス、よろしくお願いします!

    • 締切済み
    • PHP
  • PHP文字化けの問題

    いつもお世話になっております。 僕は下記のPHPコードを書きましたが、実行すると文字化けが出てしまう *************** <?php $today = mktime(0,0,0,12,2,2009); echo date("Y年m月d日",$today); ?> *************** 出力: 2009・12月2日 php.iniには 【default_charset = "Shift-JIS"】と設定しております。 質問:どうして【年】じゃなくて【・】と出力されたのか? 教えて頂ければ幸いですが、宜しくお願い致します。

    • 締切済み
    • PHP
  • phpのソースによって、文字化けしてしまいます

    お世話になっております。 PHPとMySQLを利用しております。php.iniでPHP 、my.cnfでMySQL、それぞれの文字コードを「日本語EUC」に設定し、問題なく動作しております。 ただ、PHPスクリプトのソースコードが日本語EUCでない場合、出力結果が???????のように文字化けしてしまいます。 PHPスクリプトのソースの文字コードが、日本語EUCであっても、シフトJISであっても文字化けしないようにするには、どのように設定したらよいでしょうか。 初心者であり、困っております。 どなたか、お助けいただくことはできますでしょうか。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • "utf8"→ "sjis" の 文字化け・・・

    xml内のデータで utf8でかかれた 文字列中の ~ が XPATHでデータを取得し シフトジスに変換すると Encode::encode ローカルでは ? になり サーバーでは ?のあとに文字化けします。 Jcodeだと Jcode::convert($rValue, "sjis", "utf8"); ローカルでは ?? サーバーでは 〓 になります。 windowsで作った別のそふとや ブラウザ、メモ帳では 正常にxml内のデータで ~  が入っていることは確認できています。 XPATH(findvalue)の値だけを ファイルに書き込んで メモ帳で表示すると 正常に ~ が表示されるので Encode::encode 、Jcode の問題のようなのですが きちんと表示させる方法がわかりません。  なにか 設定をご存じでしたら よろしくお願いします。

    • ベストアンサー
    • Perl
  • ajaxを使用した場合にPHP出力文字の文字化け

    サーバー側をPHPにしてajaxシステムを作ろうと思っています。 サーバからのデータ取得時にResponseTextを使用しており、ブラウザの表示での文字化けで困っています。 WinXP SP2 IE6.0では、UTF-8なら表示できますがEUC-JPは文字化けします。 しかし、Win2K IE5.0とWinX PSP1 IE6.0では、UTF-8は文字化けし、EUC-JPなら表示されます。 こっちを立てればあちらが立たずという状況で困っています。 また、直接XMLファイルやテキストファイルを作成し、これを読み込むと どのパソコンでも表示することができました。 phpから出力した文字がうまい具合に読めないのです。 ちなみにRespondeXMLを使用する場合、 XMLファイルを直接読み込むと内容を取得できるのですが、 PHPから出力したXMLデータを取得すると何も表示されません。 いい解決方法はないでしょうか。よろしくお願いいたします。 サーバシステム fedoraCore3 Apache 2.0 PHP 4.3.11 php.iniの文字コード設定はEUC-JP用にしています。

  • SmartyでXMLの読み込みデータが文字化け

    今まで使っていたサーバーのプランが古くて容量が少ないため、同じレンタルサーバーでプランUPしました。 ただそのプランは旧プランと仕様が下記のように変わっています。 【PHP】 旧プラン:PHP4 → 新プラン:PHP5 【文字コード】 旧プラン:EUC-JP → 新プラン:UTF-8 【データベース】 旧プラン:MySQL4.1 → 新プラン:MySQL5 【データベース文字コード】 旧プラン:EUC-JP → 新プラン:UTF-8 文字コードがUTF-8になったため、それに合わせてページの文字コード等を変更したのですが、 一部Smartyで作られるページがあり、そのページの文字化けだけがどうしても解決できません。 そのページはPHPファイル、tplファイル、xmlファイルの3ファイル使っています。 各ファイルはテキストエディタでUTF-8に変換し、tplファイルにある表示される文字は文字化けしません。 ただxmlファイルから読み込むデータが、すべて「?」マークの文字化けをしてしまいます。 念のため、ここだけEUC-JPのまま、つまり何も変更をしない状態にしても同じ「?」マークの文字化けをしてしまいます。 他のファイルも見てみたのですが、文字コードらしい要素が見当たらず(もしくは気づかない)原因がわかりません。 Smartyはまだよくわからなくて、このシステムを作った前々任者とも連絡がとれないので、どうすればいいのか困っています。 どうか宜しくお願いします。

    • 締切済み
    • XML
  • RSSのXMLロードで失敗してしまう

    RSSのデータを取得する、という処理を行いたいのですが、 文字コードの件でひっかかってしまっているようで なかなか前に進むことができません。 ************ // RSSの内容を取得する $rss_text = file_get_contents(※RSSのフィードURL); // RSSの文字エンコーディングを変換→再変換 $rss_text = mb_convert_encoding($rss_text, 'SJIS', 'UTF-8'); $rss_text = mb_convert_encoding($rss_text, 'UTF-8', 'SJIS'); $rss_text = preg_replace('/[\x00-\x1f]/', '', $rss_text); // RSSをパースする $rss_xml = new SimpleXMLElement($rss_text); if ($rss_xml) { // XML解析に成功した場合 // SimpleXMLElementオブジェクトからデータを取得 $items = $rss_xml->item; foreach($items as $item) { echo 'ID:'. $item->guid. '<br />'; echo 'リンク:'. $item->link. '<br />'; echo '日付:'. $item->pubDate. '<br />'; echo 'タイトル:'. $item->title. '<br />'; echo '本文:'. $item->description. '<br />'; } } ************ こういったコードを組んでいるのですが、現状では Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : attributes construct error in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Couldn't find end of Start Tag rss line 1 in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Extra content at the end of the document in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... このようなエラーが表示されてしまいます。 自分なりに文字コードを処理しているつもりではあるのですが、 他にも何かしなければならないことがあるのでしょうか? どうぞ知恵を貸していただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう