在PHP中处理CSV文件,能够满足MS和UNIX断线的要求
我有一个处理CSV文件作为输入的模块。它在我的Ubuntu机器上运行良好,直到我的团队中有人开始使用Microsoft Excel创建csv 因此,新的输入CSV上有^M(\r\n)个字符,因此,我的代码假定CSV仅由一行组成,并且所有数据都填充到$header 我已经将读取模式改为“rt”,因为php.net建议以t模式打开文本,但问题仍然存在。rt似乎只适用于Windows将\n转换为\n . 来自PHP.NET:Windows提供了一个文本模式转换标志('t'),在处理文件时,该标志将\n透明地转换为\r\n。相反,您也可以使用“b”强制二进制模式,这将不会转换您的数据。要使用这些标志,请指定“b”或“t”作为模式参数的最后一个字符 有没有办法接受这两种换行符(Microsoft和UNIX),最好只更改PHP代码?我知道有dos2unix(ubuntu中的fromdos)命令,但最新的ubuntu默认没有这个命令,我想避免安装其他实用程序 以下是我当前的源代码:在PHP中处理CSV文件,能够满足MS和UNIX断线的要求,php,csv,fopen,Php,Csv,Fopen,我有一个处理CSV文件作为输入的模块。它在我的Ubuntu机器上运行良好,直到我的团队中有人开始使用Microsoft Excel创建csv 因此,新的输入CSV上有^M(\r\n)个字符,因此,我的代码假定CSV仅由一行组成,并且所有数据都填充到$header 我已经将读取模式改为“rt”,因为php.net建议以t模式打开文本,但问题仍然存在。rt似乎只适用于Windows将\n转换为\n . 来自PHP.NET:Windows提供了一个文本模式转换标志('t'),在处理文件时,该标志将\
$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);
}
有没有可能它只读了一行好的内容,然后是一行空行,这会打破你的循环?我已经在windows结尾和文件读取器中看到了这种效果。
ini\u set('auto\u detect\u line\u endings',true)代码>
ini_set('auto_detect_line_endings',true);