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用のエスケープ処理を施してくれますので安心です。
是非実践でご利用いただければ幸いです。