PHPにてShift-JISでCSV保存する

CSV保存はそこそこよく使う

よく使うのですが、WindowsのExcelでは文字コードShift-JISが普通ですので、入力値の文字コードが違う場合、Shift-JISに変換してやらねばなりません。
そこで、UTF-8の配列データを自動的にShift-JISのCSVデータに変換する関数を用意しました。

// -------------------------------------------------------------------
// CSVデータをShift_JIS(CP932)に変換する関数
// -------------------------------------------------------------------
function arr2csv($fields) {
    $fp = fopen('php://temp', 'r+b');
    foreach($fields as $field) {
        fputcsv($fp, $field);
    }
    rewind($fp);
    $tmp = str_replace(PHP_EOL, "\r\n", stream_get_contents($fp));
    return mb_convert_encoding($tmp, 'SJIS-win', 'UTF-8');
}

上記関数の引数は、2次元配列になります。(行・列方向のArrayです)
返り値はそのままCSVとして保存できるデータの形になります。
使い方は単純明快、こんな感じ。

// サンプルデータ
$data[] = array('お名前', '年齢');
$data[] = array('太郎', '10');
$data[] = array('花子', '23');

// 書き込み
$fp = fopen('users.csv', 'a');
fwrite($fp, arr2csv($data));
fclose($fp);

これでWindowsのExcelで文字化けせずに読み込めるusers.csvが生成されます。

*

一時領域に書き出す際に fputcsv() を使用しているため、保存データにカンマやダブルクォーテーションが入っていても必要に応じてCSV用のエスケープ処理を施してくれますので安心です。
是非実践でご利用いただければ幸いです。

参考サイト