【问题标题】:fgetcsv lines with extra delimiter enclosed in double quotes带有额外分隔符的 fgetcsv 行用双引号括起来
【发布时间】:2013-10-04 00:18:31
【问题描述】:

我有这个页面,其中用户上传 CSV,然后使用 PHP 截断现有 MySQL 表,并将 CSV 中的值添加到表中。

到目前为止,我通过 Import CSV 方法使用 phpMyAdmin,但我想为用户提供一个页面,以便他们可以自己上传文件。

CSV的结构是这样的

code, name, price
102, plane toy, 23.7

99% 的行是相同的,只是其中一些被用户导出 CSV 的商店中的软件用双引号括起来。 像这样:

223, "Mary's white, tshirt", 23.9

这是我的导入失败的地方,它到达了“'s white, tshirt”中的','。

我在这里找到了一种抛光字符的方法,但它适用于模式相同的场景,我的变化,我不知道额外的“,”会在哪里,但我确实有那些项目包含额外的“,”,用双引号“item”括起来。

如何修改我的代码以绕过该问题?

这是我的代码:

 <?php
    if(isset($_POST['submit']))
    {
         $fname = $_FILES['sel_file']['name'];
        
         $chk_ext = explode(".",$fname);
        
         if(strtolower($chk_ext[1]) == "csv")
         {
        
             $filename = $_FILES['sel_file']['tmp_name'];
             $handle = fopen($filename, "r");

             $con = mysqli_connect('localhost','xxxx','zzzz','zzz');
                if (!$con)
              {
              die('Could not connect: ' . mysqli_error($con));
              }

            mysqli_select_db($con,"TABLE 1");
            $sqltruncate = "TRUNCATE TABLE `TABLE 1`";
            mysqli_query($con,$sqltruncate) or die(mysqli_error($con));
            
       
             while (($data = fgetcsv($handle, 1000, ',')) !== FALSE)
             {
                $sql = "INSERT into `TABLE 1`(code,name,price) values('$data[0]','$data[1]','$data[24]')";
                mysqli_query($con,$sql) or die(mysqli_error($con));
             }
       
             fclose($handle);
             echo "Success";
         }
         else
         {
             echo "Invalid file";
         }   
    }
    ?>

    
    <form action='<?php echo $_SERVER["PHP_SELF"];?>' method='post' enctype='multipart/form-data'>

        Choose CSV : <input type='file' name='sel_file' id='sel_file'>
        <input type='submit' name='submit' value='submit'>

    </form>

【问题讨论】:

    标签: escaping double-quotes fgetcsv


    【解决方案1】:

    在 while 中使用 foreach,然后使用 trim() 从值中删除引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多