simplexml_load_fileを使う際の文字コード

久々にphpのネタを。

今回引っかかったのは「simplexml_load_file」。

simplexml_load_fileはphp.iniで「allow_url_fopen」がonになっていないと使えないので、まずそこに注意。

あとはFacebookなんかがそうなんですが、ファイルに対してブラウザからはOKだけどサーバーなどからのアクセスは拒否してる場合があります。

その場合は「ini_set(‘user_agent’, ‘ブラウザ情報’);」でユーザーエージェントを偽ってください。(ブラウザ情報って書かれてるところにお好きなブラウザのユーザーエージェント突っ込んでください)

今回はそれもクリアした状態。

なのに取得してきたxmlをsimplexml_load_fileで変換できない。

原因は文字コードでした。

XML宣言で下記のように文字コードがEUC-JPにされていました。

]]>

しかし、simplexml_load_fileはEUC-JPに対応していない。

なので、文字コードをUTF-8に変換してあげます。

下記がサンプルソースコード。

str = file_get_contents('http://example.jp/rss.xml');
$xml = str_replace('encoding="EUC-JP">', 'encoding="UTF-8">', mb_convert_encoding($str, 'UTF-8', 'auto'));
$rss = simplexml_load_string($xml, 'simpleXMLElement', LIBXML_NOCDATA);

まずはfile_get_contentsでソースを取得しmb_convert_encodingでソースをUTF-8に変換。

str_replaceで宣言部分をUTF-8での宣言に置換。

以上で対応完了。

文字コードの違いだけだとエラーが出ず、画面が真っ白になるだけなので何がいけないのか全くわからないので苦戦しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です