0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】日本語を含むCSVファイルの文字化け対策

Posted at

お客さんに、CSVファイルを送付したかった。

ファイル数が多かったので、圧縮したZIPフォルダにまとめて送りたかったが、ファイル内の日本語部分が文字化けしてしまった。

その対策に手間取ったので備忘録。

作業環境

  • PHP 7.4
  • MAMP

ファイルの中身

結論

mb_convert_variables を使ってCSVファイルに出力する。

課題

上記の環境で作成したPHPファイルに、データベースから必要なデータを抽出し、CSVファイルに落とし込む処理を実装した。

これによって作成されたCSVファイルをmac上で開くと問題なく表示される。

しかし、それをWindowsに送ってWindowsで開くと、日本語部分(正確には全角箇所?)が文字化けしてしまった。

原因

macでは文字コードがUTF-8となっており、WindowsではSJISとなっているためらしい。

macで作成したCSVファイルはそのままだとUTF-8となっているため、それをWindowsで開くとUTF-8に対応していないから日本語は文字化けしてしまうということ。

対策

mb_convert_variables を使った。

CSVファイルに出力する際に、SJISで出力するようにした。

macでSJISでCSVを出力し、それをWindowsに送れば、Windowsでも問題なく日本語部分も表示された。

また、mac上でもSJISで出力したCSVファイルを問題なく表示させることができた。

// 文字コードShift-JISに変換して出力させる(Windowsでの文字化け対策)
mb_convert_variables('SJIS', 'UTF8', $data_ary, $csv_head);

$file          = new SplFileObject(__DIR__ . "/./csv/$filename", 'w');

// CSVファイルに書き込む
$file->fputcsv($csv_head);
foreach ($data_ary as $line) {
  $file->fputcsv($line);
}

参考

PHP DBからCSV出力する際の文字化けにつきまして|teratail

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?