使用'“'附件输出到CSV

时间:2013-06-06 20:57:08

标签: php csv

我想将查询输出到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”,“准备支付”,“RTP060620134”,“060620134RWKN”

为什么没有向字段1, 3 & 4添加附件的任何想法?

3 个答案:

答案 0 :(得分:2)

fputcsv非常聪明地猜测哪些列需要括号而不是为了保持CSV有效。

目前它正在输出有效的CSV。

fputcsv没有提供强制封闭引号的选项,可能很高兴知道为什么你需要它们全部都在引号中?

答案 1 :(得分:1)

Gumby的评论是正确的 - 如果它不需要用引号括起来,它就不会。您可以执行类似将机箱设置为空字符串的操作,并将它们放在自己身上:

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

答案 2 :(得分:0)

感谢大家的帮助。我使用了答案的组合,因为我需要能够选择要包含的字段和不包含的字段。我在字段周围添加了一个唯一的字符串(xxx),我不想在将该行写入文件之前将其括起来并使用str_replace:

 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);
相关问题