使用fputcsv
避免使用csv的默认引号fputcsv($fp, $array, ',', '"'); // OR fputcsv($fp, $array);
在test.csv中
testname,045645765789,"""04.07.2012 12:10:52"""
如何避免上述引用?
如下所示
testname,045645765789,04.07.2012 12:10:52
答案 0 :(得分:16)
两个双引号用于转义双引号,因此看起来您的日期/时间已被引用。如果您只想获得正确引用的CSV,可以尝试删除任何现有的双引号(这可能有点蛮力):
$array = array('testname',045645765789,'"04.07.2012 12:10:52"');
$array = str_replace('"', '', $array);
fputcsv($fp, $array);
// Output: testname,79323055,"04.07.2012 12:10:52"
fputcsv
想要将某些放在一个带有空格的字符串周围,所以如果你根本不需要引号,你需要解决或者让你的自己的功能,做你想做的事。 this question下有很多好的解决方案(编辑:这是一个不同的链接)。或者,PHP manual的评论中还有许多其他解决方案。
根据第一个链接,你可以这样做:
$array = array('testname',045645765789,'"04.07.2012 12:10:52"');
$array = str_replace('"', '', $array);
fputs($fp, implode($array, ',')."\n");
// Output: testname,79323055,04.07.2012 12:10:52
答案 1 :(得分:1)
我知道这是一个老问题,但我有一个类似的问题,最终放弃了fputcsv
,只是echo
用适当的标题编辑它,告诉浏览器下载文件。我知道这并没有专门解决fputcsv
的问题,但考虑到我花在它上面的时间,并意识到空间问题没有解决方案(除了问题可能更多的工作之外)如果它是可能的,我应该得到,我选择了最简单的解决方案。如果目标是创建一个动态的,可下载的CSV文件,那么下面的代码可以非常容易和灵活地完成任务。我的问题是我需要将所有字段用双引号括起来,这是我使用的服务所要求的。但是有些字段有空格,这意味着fputcsv
会自动添加单个(或双重)引号,这意味着我得到了像"'this is a value'"
这样的值。无论我尝试什么,它都不会正确输出数据。所以这解决了它(但是,它没有使用fputcsv
但我认为它是必要的,因为结果是相同的):
$filename="my_file.csv";
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=$filename");
for ($i=0; $i<=10; $i++) {
$value1 = "Here is some value";
$value2 = "Here is another value";
$value3 = "Another value";
echo $value1 . ",";
echo $value2 . ",";
echo $value3;
if ($i != 10) echo "\n"; //only add new line if it's not the last line
}
你也可以选择用双引号括起值,如果像我这样想做的话:
for ($i=0; $i<=10; $i++) {
$value1 = "Here is some value";
$value2 = "Here is another value";
$value3 = "Another value";
echo '"'. $value1 . "\",";
echo '"'. $value2 . "\",";
echo '"'. $value3 . "\"";
if ($i != 10) echo "\n"; //only add new line if it's not the last line
}
希望如果他们遇到此特定格式问题时,可以节省时间。