Как я могу обрабатывать символы \ n и \ r в поле при создании файла CSV? - PullRequest
7 голосов
/ 03 ноября 2011

Я пишу функцию для обработки вывода 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;
    }
}

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

Если в поле есть \ r или \ n, просто убедитесь, что все поле заключено в двойные кавычки (и что буквальные двойные кавычки заключены в двойные-двойные кавычки)

Итак, для окончательного результата

value1,"so this is a
multiline value",value2

, где 'a' и 'multiline' разделяются либо \ n, либо \ r (помните, \ r не будет отображаться в Excel, но его там есть), тогда это должно было сработать.

Если значения \ n или \ r встроены в значения, которые вы имеете в массиве PHP, то они должны быть уже включены соответствующим образом.

0 голосов
/ 09 декабря 2011

Файлы UTF, содержащие спецификацию, заставят Excel обрабатывать новые строки буквально даже в этом поле, заключенном в кавычки. (Проверено Excel 2008 Mac)

Решение состоит в том, чтобы сделать любые новые строки переводом каретки (CHR 13), а не переводом строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...