【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

この記事をシェアする

この記事が役に立ったら、Facebook、Twitter、はてなブックマークなどで、シェアしていただけると嬉しいです(^^)
このエントリーをはてなブックマークに追加
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


※管理人の承認後に、投稿したコメントが表示されます。
技術資料
【PHP】死活監視をPHPの標準関数だけ実現したった

ボーカル講座が連載されているかと思いきや、突如話題が変わった、サーバーの死活監視についてwww 簡易 …

技術資料
[MYSQL] データベースインポートのコマンド

シェル上でエクスポートしたデータベースをインポートする場合のコマンド。 いつも忘れてしまうので、メモ …

技術資料
【PHP】続:fputcsv関数の改行コード

前回、stream_filter_registerを使った、fputcsvの改行コードをLFからCR …