simplexml_load_file()を使っていてInput is not proper UTF-8, indicate encodinエラーが出るようになった時の対処方法
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が表示されなくなった時の対処法