simplexml_load_file()を使っていてInput is not proper UTF-8, indicate encodinエラーが出るようになった時の対処方法

2019年2月19日

simplexml_load_file()は、引数にURLを入れると、URLにリクエストしてレスポンス取ってきてdomデータにしてくれるかなり便利な関数です。

うちではgoogleのサジェスト取得に使っていました。

しかしあるときからInput is not proper UTF-8, indicate encodinエラーが表示されるようになりました。

原因:レスポンスデータにUTF-8でない文字が含まれているとエラーが出る

調べたところ、レスポンスデータの中にUTF-8でない文字が入っているご様子。

対策:file_get_contents()でデータを取ってきて変換

でさらに調べたところ、レスポンスデータの変換が必要で、結局simplexml_load_file()は使えない。

ということで、file_get_contents()でデータを取ってきて、mb_convert_encoding()で変換して、simplexml_load_string()でdomデータとして取り込む流れになりました。

実際のプログラムはこんな感じ↓

(変更前:エラーが出る書き方)
$dom = simplexml_load_file($url);

(変更後:エラーが出ない書き方。コピーペーストで使う場合は、シングルクォーテーションが全角になったりするので適宜修正して下さい)
$str = file_get_contents($url);
$str = mb_convert_encoding($str,‘UTF-8‘,‘SJIS-win‘);
$dom = simplexml_load_string($str);

ちょっと複雑になったけど現状ではやむなしです。

とりあえず動いてよかった。

参考にさせていただいたサイト↓
simplexml_load_file()、simplexml_load_string()でparser error : Input is not proper UTF-8, indicate encoding !
Input is not proper UTF-8, indicate encoding ! 突然RSSが表示されなくなった時の対処法

PC

Posted by it-kaden2