【问题标题】:Is it safe to split csv files using \n?使用 \n 分割 csv 文件是否安全?
【发布时间】:2012-05-07 10:44:44
【问题描述】:

使用\n 字符使用explode() 拆分csv 文件是否安全,或者我是否还应该包含\r 以确保安全? 90% 的文件将来自 windows 计算机,并可能使用 ms excel 从 .xls 文件转换。

【问题讨论】:

  • 您不需要包含\r。只需\n,您就可以爆炸。但是,最好在爆炸后在线路上做一个trim()。
  • @NADH 你确定吗?手册上有什么可以确认这个或任何测试的吗?
  • 是的,我很肯定。来自经验。但是,您应该真正使用fgetscsv,而不是手动分解行。如果您仍然不想这样做,您可以依赖 file() 将文件的行读入数组。

标签: php parsing csv explode


【解决方案1】:

怎么样:

$num_lines = count(file('your-file.csv'));

不确定这会有多密集?

【讨论】:

    【解决方案2】:

    您想将fgetcsv/fgets 与auto_detect_line_ending 结合使用。

    你需要数数吗?在 fgetcsv 中增加一个计数器会节省大量内存和 (cpu) 时间,而不是完整的读入和额外的循环来计算读入。

    如果您改变主意但想要保存一行甚至特定单元格以供以后处理,您也会更加灵活。

    【讨论】:

      【解决方案3】:

      你为什么不首先使用fgetcsv?

      请参阅该手册页上的以下注释:

      注意:如果 PHP 在读取 Macintosh 计算机上或由 Macintosh 计算机创建的文件时无法正确识别行结尾,则启用 auto_detect_line_endings 运行时配置选项可能有助于解决问题。

      【讨论】:

      • 需要在不循环遍历所有行的情况下计算并显示文件的总行数。现在我在做$lines = explode()... $totalLines = count($lines);
      • $file = "somefile.txt"; $lines = count(file($file));。尽管@breiti 对使用此类方法的 RAM 使用情况有所了解。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2011-04-07
      • 1970-01-01
      • 2017-01-15
      • 2021-10-17
      • 2018-10-15
      相关资源
      最近更新 更多