Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用fputcsv时避免csv文件中的默认引号_Php_Fputcsv - Fatal编程技术网

Php 使用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避免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 just
echo
用合适的标题告诉浏览器下载文件。我知道这并不是专门针对
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
}