【问题标题】:fgetcsv fails to read line ending in mac formatted csv file, any better solution?fgetcsv 无法读取以 mac 格式的 csv 文件结尾的行,有更好的解决方案吗?
【发布时间】:2010-12-27 20:52:48
【问题描述】:

我正在使用带有 fgetcsv 函数的 php 解析一个 csv 文件。它解析了一行中的所有内容,后来我发现,csv包含carraige返回为“\ r”。我看到了 - 它之前被报告为 php bug。我通过设置 php 运行时配置解决了这个问题 -

ini_set("auto_detect_line_endings", "1");

有没有更多的解决方案或者这是正确的方法?

谢谢

【问题讨论】:

  • 您应该在此处回答您自己的问题,以便关闭问题。
  • 为了将来参考,这必须在调用fopen之前完成。我在对fopen 的调用和对fgetcsv 的调用之间添加了它以进行测试,但它不起作用。我再也不会看到那二十分钟了。 :-)
  • @ScottWarren - 我不敢相信直到现在我还没有读过这篇文章。在过去的一年中,我无法弄清楚为什么我在 Store Locator Plus 中的 CSV 导入无法处理 osx 文件!感谢分享!
  • 这在 PHP 中应该默认为 '1',而不是我们试图解决这个问题。

标签: php fgetcsv


【解决方案1】:

php documentation 明确推荐设置 auto_detect_line_endings

但是,我无法理解您为什么要在 2010 年使用 \r 分隔行。如果可能,请将它们转换为 UNIX 样式的 \n

【讨论】:

  • 我的客户给了我一个包含\r的文件。我问他使用哪个操作系统版本,他告诉他使用 leopard 和 office 2008。我正在为他们构建一个插件,那里会有很多最终用户,所以我正在尝试构建这个跨平台。
  • 在我的例子中,用户在 Mac OS(10.9,Maverick)上使用 MS Office Excel 2011。
  • 在我的例子中,它是 Windows 7 上的 Excel 2013。
  • 现在是 2016 年,我仍然让人们上传这类文件,由 Mac OS 上的当前 Excel 生成。
  • 现在是 2018 年 - 仍然 从客户端获取具有不可预测的行尾的垃圾 CSV 文件; auto_detect_line_endings 是纯粹的魔法!
【解决方案2】:

\r 行尾是由 Microsoft Excel 在另存为 CSV 文件时创建的,因此如果您从 Excel 电子表格开始,则没有太多解决办法。

使用auto_detect_line_endings 可以正常工作,或者您可以使用preg_replace("/\r\n|\n\r|\n|\r/", "\n", $subject); 规范化行尾

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2020-03-08
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多