18

使用 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
4

2 回答 2

22

两个双引号用于转义双引号,因此看起来您的日期/时间已被引用。如果您只想获得正确引用的 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"

Thefputcsv想要在一个带有空格的字符串周围放置一些东西,所以如果你根本不需要引号,你要么需要解决,要么制作自己的函数来做你想做的事。在这个问题下有很多好的解决方案(编辑:这是一个不同的链接)。或者,在PHP 手册的注释中还有许多其他解决方案。

根据第一个链接,您可以执行以下操作:

$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 
于 2012-07-17T06:20:06.920 回答
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
}

如果他们遇到这个特定的格式问题,希望这可以节省一些时间。

于 2014-11-16T05:54:33.667 回答