【问题标题】:Random row breaks in CSV read with php用php读取CSV中的随机换行符
【发布时间】:2013-09-02 20:28:45
【问题描述】:

我正在尝试读取和显示 CSV 文件的内容。出于某种原因,它与我正在尝试读取的文件出错。

这是我的代码。

<?php
if (($handle = fopen("http://testdummies.dk/csv/weird2.csv", "r")) !== FALSE) {

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
    echo "<pre>";
            print_r ($data);
            echo "</pre>";

}
fclose($handle);
}
?>

我使用丹麦 CSV 文件,所以它使用 ;而不是 ,!

我在http://testdummies.dk/csv/testdups2.php做了这个测试

它生成的前 3 个数组是正确的,但第 4 个在“单元格”47 处出现。我不知道为什么。 (该文件在 excel 中打开良好)。

文件位于http://testdummies.dk/csv/weird2.csv

提前致谢。

雷内

【问题讨论】:

  • 单元格中或后面的单元格中是否有未转义的杂散;
  • 遗憾的是没有 ;在整个文件中(行之间的除外)。
  • 第 47 个单元格中有两个换行符。它被引用了,所以我认为这应该保护换行符,但也许 PHP 不承认这一点。
  • @Resin01 我在文件中看到很多;。第一行是PRODUCTS;dsdadsdsa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dsad;hejmor
  • varekurv og 5-punktssele。 Ryggen kan indstilles 直到 hvileposition,ca。 30级。 Frontbøjle tilkøbes.
    Dimensioner sammenklappet: 113 x 28 x 24 cm.

    Anbefalet alder 6m - 3+ år

    - 你在 ,所以它又从数组开始

标签: php excel csv import


【解决方案1】:

blog post 表示 PHP fgetcsv() 不能正确处理引用的换行符。他提供了自己的CsvFileParser 类来解决这个问题。

【讨论】:

  • 可悲的是,我似乎无法让它发挥作用。我不确定它是否正确读取了我的文件:( require_once("csvparser.php"); $csv = new CsvFileParser; $data = $csv->ParseFromFile("weird2.csv"); print_r($data);
  • 阅读文档 cmets。 ParseFromFile 只返回一个布尔成功指示器,而不是 CSV 数据。 CSV 数据在$data-&gt;data 中,这是一个二维数组。
  • 您还需要分配$csv-&gt;delimiter = ';'
  • 做到了:D $csv->data 有数据。现在一切正常!它不处理像æøå 这样的特殊字符,但我会尝试修复自己.. 谢谢!
【解决方案2】:

感谢@Barmar 的回答...从那篇博客文章中,我发现了一个基于 CsvFileParser 类构建的稍微更新的库,并带有一些附加功能。

ParseCSV

例如,ParseCSV 库的构建允许自动忽略文件中的标题行。此外,结果数组输出的结构似乎更清晰一些。

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多