使用fputcsv时,请避免使用csv文件中的默认引号

时间:2012-07-17 06:01:17

标签: 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

2 个答案:

答案 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
}

希望如果他们遇到此特定格式问题时,可以节省时间。