回车换行

问题描述 投票:0回答:3

我遇到了回车和换行问题。当我运行我的脚本时,它显示 CR,LF 在最后一个字段的双引号内,并且之后还有另一个 LF,实际上 CR,LF 应该在文本的双引号之外,并且不应该有另一个 LF。有人可以告诉我我做错了什么吗?

这是我的代码

$jobno = 5285;

$directory = "../CSV/";
$filename = $jobno.'.csv';
if( is_dir($directory) === false )
{
   mkdir($directory); // Create new directory 

}
$newFname = $directory.$filename;

$file = fopen($newFname, 'w');


$jobdetails="2,000 Items Supplied";
$customerName="Snap Pitzaa Ltd";
$workflow="CSV_wise";
$jobqty=50;
$filepath="Data/Snap Pitzaa/design.pdf \r\n";

$data = array(
    array($jobno, $jobdetails, $customerName, $workflow, $jobqty, $filepath),
    array('Data 21', 'Data 22', 'Data 23', 'Data 24', 'Data 25', 'Data 26'),

);

// save each row of the data
foreach ($data as $row)
{
    fputcsv($file, $row);
}

// Close the file
fclose($file);

我已经尝试了所有的东西,比如单引号、

$filepath
的外部双头,但这些都不起作用。这是记事本++中的输出

php carriage-return file-writing linefeed
3个回答
1
投票

fputcsv
由换行符终止 (docs)。因此,您不需要将
\r\n
添加到
$filepath
变量中。

这个:

$filepath="Data/Snap Pitzaa/design.pdf \r\n";

应该改为:

$filepath='Data/Snap Pitzaa/design.pdf';

这应该删除“CRLF”并将引用移动到您想要的位置。

编辑 12/13/16

从您的评论来看,听起来您需要将

fputcsv
默认输出的 unix 样式行结尾替换为 windows 样式行结尾。我见过的最优雅的方法来自这个SO问题

// Writes an array to an open CSV file with a custom end of line.
//
// $fp: a seekable file pointer. Most file pointers are seekable, 
//   but some are not. example: fopen('php://output', 'w') is not seekable.
// $eol: probably one of "\r\n", "\n", or for super old macs: "\r"
function fputcsv_eol($fp, $array, $eol) {
  fputcsv($fp, $array);
  if("\n" != $eol && 0 === fseek($fp, -1, SEEK_CUR)) {
    fwrite($fp, $eol);
  }
}

0
投票

刚刚给自己介绍了 PHP(我以前从未使用过它),我认为以下代码将正确地将 CR/LF 写入您编写的每条记录的末尾:

foreach ($data as $row)
{
    // write out the normal output, with a LF automatically created by fputcsv
    fputcsv($file, $row);
    // move the file pointer back to the end of the data
    fseek($file, -1, SEEK_CUR); 
    // write out a CR/LF
    fwrite($file, "\r\n");
}

你也应该改变

$filepath="Data/Snap Pitzaa/design.pdf \r\n";

$filepath="Data/Snap Pitzaa/design.pdf";

因为该字段中不应该有 CR/LF。


0
投票
我一直试图找到这个答案,并在找到多个页面后说“ “或类似的东西。我可能会补充说,这些都不起作用。

我发现了几篇简短的帖子,上面写着

有效……确实如此。

<?php // prints e.g. 'Current PHP version: ?.?.?' echo "Current Browser version: " . $_SERVER['HTTP_USER_AGENT'] . "<br>"; echo 'Current Server software version: ' . $_SERVER['SERVER_SOFTWARE'] . "<br>"; echo "Current PHP info:" . "<br>" ; echo phpinfo(); ?>
只需将 

echo "<br>";

 添加到单独的行中,就像将 
. "<br>";
 添加到行末尾一样。

© www.soinside.com 2019 - 2024. All rights reserved.