Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> PHP&MySQL -> 【PHP】fputcsv関数の改行コード
【PHP】fputcsv関数の改行コード
fputcsv関数を使うと、CSVファイルの出力が出来る。
下記、PHPのマニュアルサイトにある使い方。
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
ただし、このままだと環境によってはExcelで開くと
文字化けしたり、開けない?という現象がある様子。
理由は、fputcsvの改行コードが、LFになっているから。
Excelで正常に読める改行コードは、Windowsでよく使うCRLF。
これを解決するには、stream_filter_registerと、
stream_filter_appendを使うらしい。
こんな感じ。
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
stream_filter_register("msLineEnding", "ms_line_ending_filter");
stream_filter_append($fp, "msLineEnding");
fputcsv($fp, $fields);
}
fclose($fp);
class ms_line_ending_filter extends php_user_filter{
function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
$bucket->data = preg_replace("/n$/", "", $bucket->data);
$bucket->data = preg_replace("/r$/", "", $bucket->data);
$bucket->data = $bucket->data . "rn";
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
?>
下記、参考にしたサイト。
http://d.hatena.ne.jp/omoon/20110527/1306475827
この記事の最終更新日:2017/10/22
最初に記事を書いた日:2012/03/01
インターネット黎明期から運営している生きる化石、Meteoric Streamへようこそ!