0

我正在尝试添加允许 wvb 应用程序的用户使用 CSV 文件批量上传数据的功能 - 一切都很好,除非数据在实际字段本身中包含逗号。

有很多关于这个的帖子,我已经阅读了很多解决它的方法,主要是通过将逗号括在双引号中,但我不知道如何为我的代码执行此操作。

最终,我不能依靠用户在输入时为我执行此操作,因此我需要在它到达数据库之前将其作为上传过程的一部分进行 - 我尝试使用制表符作为替代分隔符,但 Excel 似乎在它的方式上非常不一致处理制表符分隔,所以我排除了这一点。

(sanitiseData 是我在整个站点中用来清理所有用户输入数据的功能)

        $handle = fopen($file_path, 'r');  
        $row_count=0;

        while (($data = fgetcsv($handle, 0, ',')) !== FALSE) {  
            if ($row_count==0) { 
                $row_count++;
                } else {
                    $row_count++;
                    $works_id = sanitiseData($data[0]);
                    $title = sanitiseData($data[1]);
                    $first_name = sanitiseData($data[2]);

                    //Use data to insert into db  
                    $sql = mysql_query("INSERT INTO csv_employee_personal (id,works_id,title,first_name) VALUES ('','$works_id','$title','$first_name')");
                }
        }  

        //delete csv file  
        unlink($file_path);  
4

1 回答 1

1

我假设这就是你的数据看起来像 "data","data2","data3,and some more","data4"

我的正则表达式非常糟糕,但我认为这将是您最好的解决方案。

同时,您可以递归地遍历一行中的每个字符并跟踪逗号和字段分隔符,当您意识到您正在查看的逗号后面没有关闭“”时,您可以将其转义。

如果我给你的示例数据与你的数据相匹配,请给我几分钟,同时我为你编写一个函数来转义逗号

于 2012-07-19T20:45:37.320 回答