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


コメント

コメントはまだありません。

コメント投稿

ご自由にコメントください!
※一度投稿すると削除できませんのでご注意ください。管理者の独断と偏見で削除する場合があります。コメント機能は予告なく停止する場合があります。

ニックネーム

コメント

カテゴリ

新着備忘録

CSVファイルからデータを取り込むときに文字化け解決方法

CSVファイルからデータを取り込むときに文字化け解決方法です。

CakePHP3.4.0 以上のクッキーの読み書き

CakePHP3.4.0 以上のクッキーの読み書き

CanonのカメラをWEBカメラにする

CanonのカメラをWEBカメラにする方法

EclipseでctpファイルをPHPとして認識させる

EclipseでctpファイルをPHPとして認識させる

eclipseのプロジェクト・エクスプローラーがフルパスになって見にくい

eclipseのプロジェクト・エクスプローラーがフルパスになって見にくい