Я пишу функцию для обработки вывода CSV, используя fputcsv()
. Я работал над ужасной проблемой \r\n
, которая была у многих людей с fputcsv()
(см. Код).
Теперь я пытаюсь выяснить, как обрабатывать \r
или \n
символов, которые включены в поле (не конец строки возвращает \r\n
). Должен ли он быть каким-либо образом экранирован перед передачей в fputcsv()
?
Функция хорошо обрабатывает экранирование для большинства символов. Но когда \n
вставляется в поле, и в MS Excel, и в Документах Google возникают проблемы с \n
, а CSV не загружается должным образом.
/*
* Revised Get CSV Line using PHP's fputcsv()
*
* Used to correct an issue with fputcsv()
* /3749088/fputcsv-i-kody-novoi-stroki
* MS Excel needs the MS Windows newline format of \r\n
*
*/
if (!function_exists('get_csv_line'))
{
function get_csv_line($list, $seperator = ",", $enclosure = '"', $newline = "\r\n")
{
$fp = fopen('php://temp', 'r+');
fputcsv($fp, $list, $seperator, $enclosure );
rewind($fp);
$line = fgets($fp);
if ($newline && $newline != "\n") {
if ($line[strlen($line)-2] != "\r" && $line[strlen($line)-1] == "\n") {
$line = substr_replace($line,"",-1) . $newline;
} else {
die( 'original csv line is already \r\n style' );
}
}
if ($newline == "\r\n" && substr($line, -2) != "\r\n") {
log_message('error', 'function get_csv_line: Error, needs \r\n to be MS Excel friendly!');
}
return $line;
}
}