【问题标题】:parsing textarea input with PHP as if its a csv?用PHP解析textarea输入就好像它是一个csv?
【发布时间】:2010-02-11 18:24:58
【问题描述】:

我正在尝试创建一个站点,人们将 CSV 文件直接粘贴到文本区域(比如它称为“原始文本”)并解析它,然后我的脚本从中生成一些东西。我知道如何解析服务器上的 csv 文件(使用 fgetcsv),但不知道如何从 POST 变量中获取输入到 fgetcsv。到目前为止,我已经尝试过这样的事情,但无济于事:

$file_handle = fopen("php://input", "r");

while (!feof($file_handle) ) {
    $line_of_text = fgetcsv($file_handle);
    echo $line_of_text[0] . '<br />';
}

【问题讨论】:

    标签: php csv input


    【解决方案1】:

    fgetcsv() 有一个名为str_getcsv() 的表亲,它应该可以满足您的需求。像往常一样,奇妙地命名(一次没有,一次带下划线)。呃,好吧!但是我们仍然喜欢 PHP,不是吗。

    示例(没有卫生设施!不过,我目前看不出有任何必要。)

    $array_csv = str_getcsv($_POST["csv"]);
    

    【讨论】:

    • 谢谢佩卡!不过小事——我的主机只运行 PHP 5.2.x,它不支持这个功能......有没有另一种简单的方法来做这样的事情,而不是要求他们升级?
    • @yonation 啊,我没看到 >= 5.3.0。查看手册页中的用户 cmets,有许多替换功能。我相信你会找到合适的。
    • 有趣的插件 - 它是什么多行 CSV?还能用吗?
    【解决方案2】:

    Pekka's example 适用于单行 CSV 数据。如果用户输入多行 CSV 数据,您必须先将其内爆到一个数组中(下例中为“$lines”),然后遍历该数组并使用 str_getcsv 解析每一行:

    $array_csv = array();
      $lines = explode("\n", $_POST["csv"]);
      foreach ($lines as $line) {
        $array_csv[] = str_getcsv($line);
      }
    }
    

    见:parse csv to multidimensional array

    【讨论】:

    • 您应该使用PHP_EOL 而不是"\n" 在任何操作系统中工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2018-06-28
    • 2020-03-17
    • 2019-10-19
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多