fgetcsv 无法读取 mac 格式的 csv 文件中的行结尾,有更好的解决方案吗?
我正在使用 php 和 fgetcsv 函数解析 csv 文件。它解析了一行中的所有内容,后来我发现,csv包含回车符“\r”。我看到 - 之前被报告为 php bug。我已经通过设置 php 运行时配置解决了这个问题 -
ini_set("auto_detect_line_endings", "1");
有没有更多的解决方案或者这是正确的方法?
谢谢
I was parsing a csv file using php with fgetcsv function. It parsed all content in a line, later i found, csv contains carraige return as "\r". I saw - it was reported as php bug before. I've solved this by setting php runtime configuration which is -
ini_set("auto_detect_line_endings", "1");
is there any more solution or is this the right way?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
php 文档明确建议设置
auto_detect_line_endings
。但是,我无法理解为什么您会在 2010 年使用
\r
来分隔行。如果可能,请将它们转换为 UNIX 风格的\n
。Setting
auto_detect_line_endings
is explicitly recommended by the php documentation.However, I cannot fathom why you would want to delimit lines with
\r
in 2010. If possible, convert them to the UNIX-style\n
.\r
行结尾是由 Microsoft Excel 在另存为 CSV 文件时创建的,因此如果您从 Excel 电子表格开始,则没有太多解决方法。使用 auto_detect_line_endings 效果很好,或者您可以使用 preg_replace("/\r\n|\n\r|\n|\r/", "\n", $ 规范行结尾主题);
\r
line endings are created by Microsoft Excel when saving as a CSV file, so there is not much getting around that if you are starting with an Excel spreadsheet.Using
auto_detect_line_endings
works fine, or you can normalize line endings withpreg_replace("/\r\n|\n\r|\n|\r/", "\n", $subject);