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"')
);

$fp fopen('file.csv''w');

stream_filter_register("msLineEnding", "ms_line_ending_filter");
stream_filter_append($fp, "msLineEnding");

foreach ($list as $fields) {
    
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について

管理人

Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> PHP&MySQL -> 【PHP】fputcsv関数の改行コード
▲Top