Php 使用fputcsv时避免csv文件中的默认引号
使用fputcsv避免csv中的默认引号Php 使用fputcsv时避免csv文件中的默认引号,php,fputcsv,Php,Fputcsv,使用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 两个双引号用于转义双引号,因此看起来您的日期/时间已经被引用。如果您只想获得正确引用的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
两个双引号用于转义双引号,因此看起来您的日期/时间已经被引用。如果您只想获得正确引用的CSV,可以尝试删除任何现有的双引号(这可能有点暴力):
fputcsv
想要在一个字符串周围加上一个空格,所以如果你根本不想要引号,你就需要解决这个问题,或者创建你自己的函数来完成你想要的。下面有很多很好的解决方案(编辑:这是一个不同的链接)。另外,在委员会的评论中还有许多其他的解决方案
根据第一个链接,您可以执行以下操作:
$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
我知道这是一个老问题,但我也遇到了类似的问题,最终放弃了
fputcsv
,而just and justecho
用合适的标题告诉浏览器下载文件。我知道这并不是专门针对fputcsv
的问题,但考虑到我花了大量时间在这上面,并且意识到空间问题没有解决方案(如果可能的话,除了可能需要比问题更多的工作之外),我选择了最简单的解决方案。如果目标是创建一个动态的、可下载的CSV文件,那么下面的代码可以轻松灵活地完成任务。我的问题是,我需要按照我正在使用的服务的要求,将所有字段包装成双引号。但是有些字段有空格,这意味着一个单引号(或双引号)由fputcsv
自动添加,这意味着我得到了类似“‘这是一个值’”
的值。无论我尝试了什么,它都无法正确输出数据。因此,这就解决了问题(但是,它不使用fputcsv
,但我认为没有必要,因为结果是一样的):
$filename=“my_file.csv”;
标题(“内容类型:text/csv;字符集=utf-8”);
标题(“内容处置:附件;文件名=$filename”);
对于($i=0;$i)项,您之所以会得到三个“
引号,是因为该日期字符串已被”
引号包围。(请参阅。)在将数组传递给fputcsv()
之前,请删除引号,或者手动使用带有逗号的内爆()
,而不是使用fputcsv()
。是的,但是由于字符串中的空格,将有一个引号testname,045645765789,“04.07.2012 12:10:52”
。如何避免?是的日期/时间已经被引用,如果我避免引用,仍然会有一个引号,如testname,045645765789,“04.07.2012 12:10:52”
由于字符串中存在空格。如何避免这种情况?正如我在回答中所说,使用fputcsv
您无法真正避免这种情况。请查看我发布的链接,了解一系列解决方法。@JustinJohn抱歉,我发布的第一个链接与我的意图不同(现在更正)。我已经更正了它,并添加了一些代码,演示了实现您所追求的目标的一种方法。谢谢,它是有效的。是否可以用fputcsv
而不是fputs
复制相同的结果?太棒了!简而言之,您不能。fputcsv
总是用空格括起一个字符串。
$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
$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
}