CSVで書き出す関数fputcsv
2009/10/31 | PHPの基本
CSVファイルを取り扱うのに便利な関数にfgetcsv、fputcsvがある。CSV吐き出し機能が欲しかったので、fputcsvの仕様を検証してみることにした。マニュアルではこんな具合に書かれている。
int fputcsv ( resource $handle , array $fields [, string $delimiter [, string $enclosure ]] )
マニュアルによると$delimiterは1文字でなくてはいけないらしい。だから$delimiterに2文字以上の文字列(例えば「<>」)を指定するのはNGらしい。同様にタブを「\t」と指定するのもダメらしい。この場合はchr関数を使ってchr(9)と記述しなくてはいけないらしい。1バイトってことかな。$enclosureも同様。
この関数で便利だなと思ったのは、配列内の値にエスケープすべき文字列(「,」と「”」)が含まれているとき、うまく取り計らってくれることだ。それらの文字列が入っていると、自動的に「”」で囲み、「”」の場合はエスケープまでしてくれる。これはとても便利。でも、不便なのは、エスケープすべき文字が入っていない場合は囲み文字で囲んでくれないということ。個人的には数値以外は全て囲んで欲しいのだが、そういう意見は少ないのだろうか。
でもまぁ便利。使ってみることにする。
2009/11/05 at 9:44 AM
そうなんです。fgetcsvもデータを全て””で囲んでると正常に機能しますが、エクセルのCSV方式の,が入っているデータだけ””で囲んでるようなケースだとまともに動いてくれません。
どうにかならないものですかね。