2013-06-06 17 views
7

とCSVへの出力 '"' エンクロージャ

次:。

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename='.$strFeederFileName.''); 

$output = fopen('php://output', 'r+'); 
$fileheader = array("FH", "READY TO PAY", "RTP060620134", "060620134RWKN", ""); 
fputcsv($output, $fileheader, ",", '"'); 

出力この:

FH、「お支払い可能」、RTP060620134,060620134RWKN

"FH"、 "支払うためにREADY"、 "RTP060620134"、 "060620134RWKN"

任意のアイデアそれはフィールド1, 3 & 4にエンクロージャを追加していない理由:私はそれがする必要がありますか?

+0

PHPにはそのようなオプション...しかし、HTTPを参照してください:私は、私は、ファイルに行を書き込む前に囲み、str_replaceを使用したくないフィールドを中心に独自の文字列(XXX)を追加//代わりの実装を提供するためにstackoverflow.com/questions/2514597/php-fputcsv-and-enclosing-fields – Orangepill

+2

空白、引用符、または分離文字のような文字が含まれている必要はありません。 – Gumbo

答えて

1

fputcsvは、どの列にかっこを付ける必要があり、CSVを有効にするためには使用しないでください。

現在、有効なCSVを出力しています。

fputcsvは囲みを強制的に引用符で囲むオプションを提供していませんが、引用符で囲む必要がある理由を知っていると良いでしょう。

+0

これは、Oracleにインポートするフィーダ・ファイルです(これは、引用符が必要なフィールドを特定するためのものです)。私はそれはその場合は本物のCSVファイルではないと思うが、他のオプションがありますか? – Dion

0

ガムビーのコメントは正しいです - 引用符で囲む必要がない場合は、それはありません。あなたは空の文字列に設定エンクロージャのような何かを、そして自分自身にそれらを置くことができます:すべてのあなたの助けを

$fileheader = array("FH", "READY TO PAY", "RTP060620134", "060620134RWKN", ""); 
for($i=0; $i<count($fileheader); $i++) 
{ 
    $fileheader[i] = '"' . $fileheader[$i] . '"'; 
} 
fputcsv($output, $fileheader, ",", ''); 
0

感謝を。私は、囲むフィールドと囲まないフィールドを選択できる必要があったので、回答の組み合わせを使用しました。

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename='.$strFeederFileName.''); 

function dumbcsv($file_handle, $data_array, $enclosure, $field_sep, $record_sep) 
{ 
dumbescape(false, $enclosure); 
$data_array=array_map('dumbescape',$data_array); 

$line = $enclosure 
    . implode($enclosure . $field_sep . $enclosure, $data_array) 
    . $enclosure . $record_sep; 

$line = str_replace('"xxx', '', $line); 
$line = str_replace('xxx"', '', $line); 

return $line; 
} 

function dumbescape($in, $enclosure=false) 
    { 
    static $enc; 
    if ($enclosure===false) { 
    return str_replace($enc, '\\' . $enc, $in); 
    } 
    $enc=$enclosure; 
} 

$output = fopen('php://output', 'r+'); 
$rows_csv = mysql_query('SELECT * FROM tblfeeder'); 

//Add file header 
$fileheader = array("FH", "READY TO PAY", $fileheader, $strOracleBatchName); 
$line = dumbcsv($output, $fileheader, "\"", ",", "\r\n"); 
fwrite($output, $line); 

// loop over the rows, outputting them 
while ($row_csv = mysql_fetch_assoc($rows_csv)) fwrite($output, dumbcsv($output, $row_csv, "\"", ",", "\r\n")); 

//Add file footer 
$filefooter = array("IF", "xxx".$batchtotal."xxx", "xxx".$invnum."xxx"); 
$line = dumbcsv($output, $filefooter, "\"", ",", "\r\n"); 
fwrite($output, $line); 
関連する問題