如何在mac和windows

时间:2018-02-28 17:51:29

标签: php regex laravel csv laravel-5

我只是想将这个文本从csv file导入到解析它的laravel php脚本中:

store_id,ref,priority,tagline
10,confuscian,5,confuscian says

当我在Chrome上的mac机器上发送它时,csv的主体显示如下:

enter image description here

enter image description here

因此您可以看到添加了\n

{"csv":"store_id,ref,priority,tagline\n10,confuscian,5,confuscian says"}

然而,当我从windows添加相同的csv时,它看起来像是这样:

{"csv":"store_id,ref,priority,tagline 10,confuscian,5,confuscian says"}

读取此内容的脚本过滤掉\r\n different OS problem,如下所示:

    $file = storage_path('batch_update.csv');
    // replace new line characters for mac/win/linux
    $str = preg_replace('/(\r\n|\r|\n)+/', "\n", $this->data);
    file_put_contents($file, $str); 

    $this->data = $this->csvToArray($file);

    if (!$this->data || !$this->checkForRequiredColumns()) {
        return false;
    }

问题是在Windows中,\n甚至都没有显示出来!这会混淆csvToArray脚本:

特质CsvHelpers {     私有函数csvToArray($ filename)     {         if(!file_exists($ filename)||!is_readable($ filename)){             返回false;         }

    $header = null;
    $data   = array();
    if (($handle = fopen($filename, 'r')) !== false) {
        while (($row = fgetcsv($handle, 1000, ',')) !== false) {
            $row = array_map('trim', $row);
            if (!$header) {
                $header = $row;
            } else {
                $data[] = array_combine($header, $row);
            }
        }
        fclose($handle);
    }
    return $data;
}

问题

我如何制作它以便当我在Windows中导出csv时,每一行都以\n结尾?

0 个答案:

没有答案