我想将查询输出到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
添加附件的任何想法?
答案 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);