PHPでcsvダウンロード際に文字化けする現象
csvファイルに記載されているデータを画面に表示し、
それをcsvとして出力するという課題に取り組んでいます。
文字化けを回避するよう記述しているつもりが、なかなかうまくいかず
文字化けしてしまいます。
どなたか教えてください。
【元のcsvファイル】※仮のデータ
"tanaka",5000
"yoshida",1000
"suzuki",400
【ブラウザに表示したいデータ】
社員数:
売上合計:
平均売上:
上記をブラウザに表示しcsvファイルとしてダウンロードしたいという感じです。
サンプルコードは下記に記載致します。
<?php
$datafile = 'sales.csv'; // CSV ファイル
$fh = fopen($datafile, 'r');
if ($fh) {
flock($fh, LOCK_SH);
$lst = array();
while ($line = fgets($fh)) { // ファイルから一行ずつ読み込む
$all = explode(',', chop($line)); // カンマで分割して配列に
while (($key = array_shift($all)) && ($val = array_shift($all))) { // 配列の先頭から名前と値を取り出す
$lst{$key} = $val; // 連想配列にセット
$lst{$key} = mb_convert_encoding($lst{$key}, "SJIS", 'utf-8');
}
}
$sum = 0;
$count = 0;
foreach ($lst as $name => $sale) {
$count += 1;
$sum += $sale;
$avr = $sum / $count;
}
$fileName = "report.csv";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($fileName));
readfile($fileName);
echo "社員数:".$count."<br>";
echo "売上合計:".$sum."<br>";
echo "売上平均:".$avr."<br>";
flock($fh, LOCK_UN);
fclose($fh);
}
?>