我正在尝试在Linux上读取由M $ Excel生成的CSV文件。

该文件引用了多行(x0A分隔)列和0x0d0a行终止。

Linux上的PHP使用0x0a作为行终止符,因此所有基于行的工具(文件,fgets,fgetcsv)都认为数据单元格中间有记录中断。

如果没有逐字节处理文件,我可以暂时更改PHP的行尾字符(PHP_EOL常量),这样我就可以轻松地解析文件了。

我认为可以在Perl中使用“$ \”进行。 PHP中有类似的内容吗?

我意识到我可以逐字节解析,但我正在寻找一种更清洁的方法。

有帮助吗?

解决方案

如果conceptDawg建议 auto_detect_line_endings 不起作用,我建议通过 file_get_contents ()然后调用 explode ()将文件分成多行。你可以传递你想要的任何字符 explode()

其他提示

您可以尝试使用' auto_detect_line_endings '运行时配置选项。它说使用它会自动找出正确的行结尾。来自文档:

  

启用后,PHP将检查fgets()和file()读取的数据,以查看它是使用Unix,MS-Dos还是Macintosh行结束约定。

     

这使PHP能够与Macintosh系统互操作,但默认为Off,因为在检测第一行的EOL约定时,性能会受到很小的影响,并且因为在Unix系统下使用回车符作为项目分隔符的人会体验非向后兼容的行为。

如果这不起作用,那么你总是可以将整个文件读入内存(取决于文件大小,这可能是不可行的),并对有问题的字符进行preg_replace,将它们替换为“正确”的字符。字符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top