如何在php中使用不同的行终止进行读取?
-
06-07-2019 - |
题
我正在尝试在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,将它们替换为“正确”的字符。字符。
不隶属于 StackOverflow