【问题标题】:Dealing with line breaks in individual cells in a CSV file处理 CSV 文件中单个单元格中的换行符
【发布时间】:2016-10-09 18:53:38
【问题描述】:

我目前正在开发一个 Web 应用程序,该应用程序将从 CSV 文件中获取数据,并将其转换为数组,以便更轻松地访问文件中的特定数据。不过我确实有问题。目前我的代码看起来像这样:

$data = file_get_contents('data.csv');
$array = str_getcsv($data,"\n");
$i = 0;

foreach($array as $row){
     $newArray[$i] = str_getcsv($row,";");
     $i++;
}

这在大多数情况下都可以正常工作,但是当单个值内有换行符时它会搞砸。我正在处理产品描述,所以一些公司在他们的描述中故意换行。当我在 Excel 中打开文件时,我可以清楚地看到这些换行符,我现在的问题是,我该如何处理它们?我尝试了很多不同的方法并在网上阅读了很多内容,但似乎没有什么对我有用。

希望你能帮我找到解决办法。

编辑

这是 CSV 文件中的示例

5124;"Altid billig el og 5 stjerner på Trustpilot";"Altid billig el og 5 stjerner på Trustpilot.@ Vi har kun ét produkt og du skal ikke længere spekulere i om du nu har en billig elleverandør 6 måneder eller lign。 Vi går efter at være blandt de billigste elleverandører, hvilket vi også beviser hvert år。"

我不知道这是否有意义,但这就是问题所在。在这个特定的例子中,当我在 excel 中打开它时,有一个“强制”换行符,我在其中放置了一个粗体“@”。据我所知,这应该是有效的?

【问题讨论】:

  • 只是好奇:CSV 文件有效吗?包含换行符的值周围是否有双引号?你没有举个例子,所以我不能说。
  • 我现在在帖子中添加了一个示例。 @KIKOSoftware
  • 我认为 CSV 格式中不允许值内的换行符。例如,此页面:edoceo.com/utilitas/csv-file-format每条记录为一行 开头。更多细节在这里:ietf.org/rfc/rfc4180.txt
  • 您可以导出不同设置的数据吗? Excel 处理与其他 csv 处理程序不同。 stackoverflow.com/questions/1241220/…
  • @KIKO Err... 该页面上的第一个要点:“每条记录是一行 - 行分隔符可以是 LF (0x0A) 或 CRLF (0x0D0A),一行分隔符也可以嵌入到数据中(使记录多于一行但仍然可以接受)。"

标签: php csv


【解决方案1】:

str_getcsv 需要 一行 CSV 格式的文本,您不能使用它来解析整个文件。让fgetcsv逐行读取解析文件:

$file = fopen('data.csv', 'r');
$data = [];

while ($row = fgetcsv($file)) {
     $data[] = $row;
}

fclose($file);

var_dump($data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2021-10-15
    相关资源
    最近更新 更多