Php fputcsv在换行符周围加引号

Php fputcsv在换行符周围加引号,php,fputcsv,Php,Fputcsv,我使用fputcsv创建CSV文件供外部服务提供商导入,我遇到了一些问题,其中PHP没有使用正确的换行符(如果您将其保留为默认值),它只使用/n而不是/r/n,我找不到一种方法来更改这一点。我在行尾使用PHP_EOL强制执行所需的换行操作,并认为一切正常,从而解决了这个问题。结果是在/r/n换行符周围加上双引号,然后在其后加上/n 代码如下: $csv[$i]['Station ID']=$station_ID; $csv[$i]['Program

我使用fputcsv创建CSV文件供外部服务提供商导入,我遇到了一些问题,其中PHP没有使用正确的换行符(如果您将其保留为默认值),它只使用/n而不是/r/n,我找不到一种方法来更改这一点。我在行尾使用PHP_EOL强制执行所需的换行操作,并认为一切正常,从而解决了这个问题。结果是在/r/n换行符周围加上双引号,然后在其后加上/n

代码如下:

            $csv[$i]['Station ID']=$station_ID;
            $csv[$i]['Program Start Date']=$date;
            $csv[$i]['Program Start Time']=$start_time;
            $csv[$i]['Program End Time']=$end_time;
            $csv[$i]['Duration']=$dur;
            $csv[$i]['Program Title']=$program;
            $csv[$i]['Program Description (optional)']=$desc;
            $csv[$i]['Category']=$genre;
            $csv[$i]['Sub Category']=$subgenre;
            $csv[$i]['Time Zone?']=$timezone;
            $csv[$i][]=PHP_EOL;

        }
        $prev_program = $program ;
        unset($gendesc, $desc, $dur, $gendur, $end, $end_time, $start, $start_time, $end_time);
        $i++;
    }


// create a file pointer connected to the output stream
$output = fopen("php://output",'w') or die("Can't open php://output");

// output headers so that the file is downloaded rather than displayed
header('Content-Type: text/csv; charset=utf-8');
header("Content-Disposition: attachment; filename='" . $filename . "'");

// output the column headings
fputcsv($output, array('Station ID', 'Program Start Date', 'Program Start Time', 'Program End Time', 'Duration', 'Program Title', 'Program Description (optional)', 'Category', 'Sub Category', 'Time Zone?',PHP_EOL));

// loop over the rows, outputting them
foreach ($csv as $line) {
    $line = preg_replace('/(^|;)"([^"]+)";/','$1$2;',$line);
                fputcsv($output, $line);
}

fclose($output) or die("Can't close php://output");
}
?>
这是前两行输出:

"Station ID","Program Start Date","Program Start Time","Program End Time",Duration,"Program Title","Program Description (optional)",Category,"Sub Category","Time Zone?","
"
36170,03/27/17,00:00,00:30,30,"Love Food","Love Food.",Other,Food,Atlantic,"
"

如果我将PHP_下线拉出来,它会根据记事本输出一个文本块(我必须让它清晰易读,以便用户在发送之前可以根据需要进行验证/修改),但在代码编辑器中它似乎是正确的。有没有办法将fputcsv中的默认EOL语句从/n更改为/r/n?我能找到的唯一参考是2008年的补丁的描述,除了将其更改为系统默认值,并且在默认值为/n的linux系统上运行。

“从/n到/r/n”-只是一个旁注:如果您打算这样做,正确的语法是
\n
\r\n
。这些换行仅在写入的文件中显示为新行。您可能已使用其他编码方法在编辑器中打开该文件。如果要将它们作为新行输出到屏幕,则用户
nl2br()

PHP_EOL
是跨平台的,然而,我在一些罕见的案例中看到,根据平台的不同,有人不得不使用
\n
\r\n
。请看这篇文章,一个家伙解决了同样的问题:这是写出来的文件发送给我们的提供商。我正在等待回音,看事情是否在其一端\n起作用(我把斜线弄乱了,谢谢你指出这一点。)我可能需要告诉我的员工,他们需要在excel中进行编辑,而不是从现在开始记录它是否起作用,因为这样可以在删除EOL的情况下加载它。