【问题标题】:Read a tabulator seperated csv with PHP使用 PHP 读取制表符分隔的 csv
【发布时间】:2019-06-18 13:58:34
【问题描述】:

我无法使用 php 读取制表符分隔的 csv 文件(是的,我知道它的 csv 并且没有 tsv 并且 c 用于制表符...)并将其正确分隔。当我用 echo 或 readfile 给出我导入的数据时,所有制表符都被空格替换,我不能使用空格作为分隔符。

其实我有点困惑,当我使用谷歌时这个问题并不常见,所以也许我是问题...

XAMPP v3.2.3 和 PHP 版本 7.3.5 存在问题

$tempFile = fopen($tempFilePath, "r");
        $uploadData = fread($tempFile, filesize($tempFilePath));
        fclose($tempFile);

        echo $uploadData;


        $uploadData =   str_replace('"','',$uploadData);    
        $uploadData = str_replace('\r\n','\n',$uploadData);
        $uploadData = str_replace('\r','\n',$uploadData);
        $uploadData = str_replace(';',',',$uploadData);
        $uploadData = str_replace('\t',',',$uploadData); //Here i'm trying to replace the tabulator with a colon to work with it afterwards

【问题讨论】:

    标签: php html csv tabulator


    【解决方案1】:

    在 PHP 中读取 CSV 文件时,最好使用fgetcsv 函数。使用它,您可以指定文件的分隔符。该函数将输出文件的一行。你的分隔符应该是"\t"

    【讨论】:

    • 问题实际上是更多的人在使用它,我无法指定系统和配置。所以我想让它可以与冒号、分号和制表符一起用作分隔符。是的,我讨厌 Excel ……
    • 看看这篇有非常相似问题的帖子:Link
    【解决方案2】:

    你应该使用fgetcsv function,它已经具有读取tsv的功能。

    像这样:

    $uploadData = [];
    if (($handle = fopen("test.csv", "r")) !== false) {
        while (($data = fgetcsv($handle, 0, "\t")) !== false) {
            $uploadData[] = $data;
        }
        fclose($handle);
    }
    

    如果你想将 tsv 转换为 csv 你可以使用反函数fputcsv:

    $fh = fopen('file.csv');
    foreach ($uploadData as $datum) {
        fputcsv($fh, $datum);
    }
    fclose($fh);
    

    如果您想自动检测 csv 分隔符,也许 this article 可以帮助您。

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 2016-04-22
      • 2015-12-19
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多