Возврат каретки и перевод строки

Я застрял с проблемой возврата каретки и перевода строки. Когда я запускаю свой скрипт, он показывает 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 но ничего из этого не работает. Вот вывод в блокноте ++

введите описание изображения здесь

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

Другие решения

fputcsv завершается переводом строки (документы). Поэтому вам не нужно добавлять \r\n на ваш $filepath переменная.

Это:

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

Должно быть изменено на это:

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

Это должно удалить «CRLF» и переместить цитату туда, где вы хотите.

Изменить 13/12/16

Из вашего комментария звучит так, как будто вам нужно заменить окончания строки в стиле Unix, которые fputcsv выводит по умолчанию с окончаниями строк в стиле Windows. Самый элегантный способ сделать это этот ТАК вопрос:

// 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);
}
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector