CSVファイルからデータを取り込むときに文字化け解決方法
CSVファイルをアップロードして、そのデータをデータベースに取り込みたいときありますよね。
その時CSVファイルをそのまま取り込むと文字化けします。文字コードが違うからです。
CSVがShift-JISで、システム側はUTF-8だったりします。
なので、データベースに保存する前に文字コードを変換します。
$fp = fopen('xxxx.csv', 'r');
while ($row = fgetcsv($fp) !== false) {
mb_convert_variables('UTF-8', 'SJIS-win', $row);
}
これでうまく行ったかなーと思いきや、たまーに文字化けします。なんでや!!
これは5C問題だそうです。
2バイト目が5Cになる文字がいくつかあり、5Cがエスケープ文字として判定されおかしくということです。
解決法は、fgetcsvをする前に変換するとよい。
$sjis = file_get_contents('sjis.csv');
$utf8 = mb_convert_encoding($sjis, 'UTF-8', 'SJIS-win');
file_put_contents('utf8.csv', $utf8);
$fp = fopen('utf8.csv', 'r');
参考:https://qiita.com/suin/items/3edfb9cb15e26bffba11
カテゴリ:PHP 投稿日時:2021年1月2日 17:09
コメント
コメントはまだありません。
コメント投稿
ご自由にコメントください!
※一度投稿すると削除できませんのでご注意ください。管理者の独断と偏見で削除する場合があります。コメント機能は予告なく停止する場合があります。
カテゴリ
新着備忘録
「MySQL」ERROR 2013 (HY000) at line : Lost connection to MySQL server during query
MySQLでERROR 2013 (HY000) at line : Lost connection to MySQL server during queryエラーが出た。
CakePHP3 CSSやjavascriptを更新したのに反映されない!
CakePHP3でCSSやjavascriptにタイムスタンプをつける方法です。
CakePHP3のタイムゾーン設定
CakePHP3のタイムゾーン設定方法です。
Thunderbirdで同じメールが何度も届く件
Thunderbirdで同じメールが何度も届く件についてです。
CakePHP3でCSV出力
CakePHP3でCSV出力する方法です。