0

我有一个将 CSV 文件作为输入处理的模块。它在我的 Ubuntu 机器上运行良好,直到我团队中的某个人开始使用 Microsoft Excel 创建 csv。

结果,新的输入 CSV 上有 ^M ( \r\n ) 字符,因此,我的代码假设 CSV 仅包含 1 行,并且所有数据都填充到 $header。

我已将阅读模式更改为“rt”,因为 php.net 建议以 t 模式打开文本,但问题仍然存在。似乎 rt 仅适用于 Windows 将 \n 转换为 \rn 。

来自 PHP.NET:Windows提供了一个文本模式翻译标志 ('t'),当处理文件时,它将透明地将 \n 转换为 \r\n。相反,您也可以使用“b”强制二进制模式,这不会转换您的数据。要使用这些标志,请将“b”或“t”指定为模式参数的最后一个字符。

有没有办法通过只更改 PHP 代码来接受两种换行符(Microsoft 和 UNIX)?我知道有dos2unix (fromdos in ubuntu) 命令,但最新的 Ubuntu 默认没有这个命令,我想避免安装其他实用程序。

以下是我当前的源代码:

        $row = 1;
        if (($handle = fopen($file, "r")) !== FALSE)
        {
            while (($data = fgetcsv($handle)) !== FALSE)
            {
                $num = count($data);

                if($row == 1)
                {
                    $header = $data;
                }else
                {
                    $rows[$row-1] = $data;
                }
                $row++;
            }
            fclose($handle);
        }
4

1 回答 1

2

auto_detect_line_endings

ini_set('auto_detect_line_endings',true);
于 2013-11-01T03:06:30.247 回答