fgetcsv 无法正确识别转义字符

fgetcsv not recognizing escape character correctly

我有一个 CSV 字符串文件,如下所示:

"12345","445 Maple St.","Going to the "orange" store","610-123-4567"

我正在使用以下内容解析每一行:

while (($data = fgetcsv($file_matters, 500, ',', '"', '"')) !== FALSE)

而不是像这样获取数组:

array(4) (
  [0] => (string) 12345
  [1] => (string) 445 Maple St.
  [2] => (string) Going to the "orange" store
  [3] => (string) 610-123-4567
)

我得到:

array(4) (
  [0] => (string) 12345
  [1] => (string) 445 Maple St.
  [2] => (string) Going to the orange" store"
  [3] => (string) 610-123-4567
)

注意不正确的双引号。它们应该像 "orange" 这样包裹在橙色周围,但正如您所见,它们不是。我正在使用 fgetcsv 的第 5 个参数,它应该自动转义双引号。有什么想法吗?

在您的 CSV 文件中,您需要对内容进行转义。

$csvContent = str_replace(' "', ' \"', $csvContent);
$csvContent = str_replace('" ', '\" ', $csvContent);

您只需从 csv 文件中获取数据并使用 (,)。然后使用 trim () 函数删除双引号,如下所示。我希望,我解决了你的问题。

Book1.csv

"12345","445 Maple St.","Going to the "orange" store","610-123-4567"

代码是

<?php
   $row = 1;
   $handle = fopen("Book1.csv", "r");
   while (($data = fgetcsv($file_matters,500, ",")) !== FALSE) {
      $num = count($data);
      $row++;
      for ($i=0; $i < $num; $i++) {
      $hh=$data[$i];
          $a[]=trim($hh,'"') ;// remove "" and save in a array
     // $a=trim($hh,'"') ;
          //echo$a. "<br />\n";
      }
   }
   fclose($file_matters);
   print_r($a);
?>

结果

Array ( [0] => 12345
        [1] => 445 Maple St.
        [2] => Going to the "orange" store
        [3] => 610-123-4567 ) 

我不确定您的 CSV 语法是否真的有效;例如,这将是有效的:

"12345","445 Maple St.",Going to the "orange" store,"610-123-4567"

您的摘录无效,因为您在 " 中有 "

CSV 要求所有字段都用引号引起来,PHP 也可以处理带有未引号块的 CSV 行。

php > var_dump(
    >    str_getcsv('"12345","445 Maple St.",Going to the "orange" store,"610-123-4567"')
    > );
array(4) {
  [0]=>
  string(5) "12345"
  [1]=>
  string(13) "445 Maple St."
  [2]=>
  string(27) "Going to the "orange" store"
  [3]=>
  string(12) "610-123-4567"
}