2012-02-10 20 views
2

次のコードを使用して、フォームからデータを取得し、csvとして保存します。PHPからCSV改行の問題

$cvsData = $name . "," . $address . "\n"; 

$fp = fopen("file.csv", "a"); 

if ($fp) { 
    fwrite($fp, $cvsData); // Write information to the file 
    fclose($fp); // Close the file 
} 

誰かがアドレスフィールドにカンマや改行を入力すると、それはフォーマットを壊します。だから私はそれをエスケープして、アドレス全体が同じフィールドにとどまるようにすることができますか?

+1

開始...そして、少なくとも、あなたはコンマを心配する必要はありません –

答えて

4

引用符内の各データ項目を入れてください。引用符で囲まれた値の中にある二重引用符は、一重引用符を表します。例えば

"Daniel Norton","Congress Ave. 
Austin (""Keeping it weird""), TX" 

あなたの例を参照:

$data = str_replace('"','""',$data); 
$address = str_replace('"','""',$address); 
$cvsData = "\"$data\",\"$address\"\n"; 

まだよく、ちょうどPHP関数fputcsvを使用しています。あなたのデータで

CSVファイルを書くのではなく、独自の$ cvsDataラインを構築するためのPHPの組み込みfputcsv()関数を使用して
fputcsv($fp,array($data,$address)); 
+0

べき私は各変数の引用符を追加します。それは私にエラーを与える... – Ajay

+0

私はあなたの例を使用して、詳細を追加しました。 – danorton

0

CSVは、それを読むために使用されるソフトウェアに完全に依存しています。

特定のプログラムがCSVデータをどのように期待するかについての詳細は、http://www.csvreader.com/csv_format.phpをご覧ください。

これらの状況のほとんどを処理できるCSVクラスを作成しました。あなたはそれを見てみたいかもしれません。そのクラスを使用して

https://gist.github.com/1786683

そして、あなたの質問に答えるために、あなたの可能性

$csv = CSV::newExcel(); 
$cvsData = $csv->row($name, $address); 
// etc...