CSVファイルをExcelで開いていくつかの操作を実行できると同時に、PHPを使用してCSVファイルをインポートすることも非常に簡単です。そのため、通常はphpを使用してcsvをエクスポートしますが、Excelでcsvを開くと文字化けが発生することがあります。以下の解決策を見てみましょう。
文字化け
普通に出力できるCSVファイルをエクスポートするコードを書きました
ファイルを開くにはCSVやTXTプログラムを使うのが一般的ですが、Excelでファイルを開くと中国語の文字化けの問題が発生します(これはおかしい、なぜExcelで文字化けが起こるのでしょうか?)
エンコードを確認すると、エクスポートされたCSVファイルはUTF-8 BOMフリーエンコード形式であることがわかり、通常はBOM付きのUTF-8エンコード形式を使用しています。
BOMを追加してみたところ、中国語の文字化け問題は解決しました。
CSVファイルにBOMを追加します
サンプルコード:
$file = fopen($export_file_path, 'w');
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); // BOMを追加します
foreach ($contens as $content) {
fputcsv($file, $content);
}
fclose($file);
別の解決策
関数 down_file($filepath,$filename)
{
if(!file_exists($filepath))
{
echo "バックアップ エラー、ダウンロード ファイルが存在しません";
exit();
}
ob_end_clean();
header('Content-Type: application/download');
header("Content-type: text/csv");
header('Content-Disposition:attachment;filename="'.$filename.'"');
header("Content-Encoding: binary");
header("Content-Length:".filesize($filepath));
header("Pragma: no-cache");
header("有効期限: 0");
readfile($filepath);
$e=ob_get_contents();
ob_end_clean();
}
$fname='usersdata.csv';
$handle=fopen($fname,'wb');
$strUsersData =iconv('utf-8','gb2312',$strUsersData);//エンコーディングを変換します
if(fwrite($handle,$strUsersData)==false){}
fclose($handle);
down_file($fname,'555.csv');