我有一个将 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);
}