PHP fgetcsv escape ''


PHP fgetcsv escape ''

csv文件在其记录之一中包含'''字符,我无法获得数组中键值对的确切数量。

我使用PHP的fgetcsv函数如下-

 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
   ....
 }

我也试过像下面这样转义这些字符。

 while (($data = fgetcsv($handle, 1000, ",",'"',"''")) !== FALSE) {
    ....
 }

但它没有工作。可能的解决方案是什么?

我也遇到过同样的问题,而且解决起来太容易了。如果您的字符串包围字符是'"'(双引号),并且您只是不想将反斜杠视为转义字符,只需通知双引号两次,作为字符串包围字符和转义字符。

    $data = fgetcsv($handle, 8192, ';' , '"' , '"'  );
$handle = @fopen($filename, "r");
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        $buffer = preg_replace('/('''",)/',''' ",',$buffer);
        $buffer = preg_replace('/('''"("?),)/',' ',$buffer);
        $data[] = str_getcsv($buffer);
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail'n";
    }
    fclose($handle);
}

您可能需要手动修复该文件。如果文件只有一个斜杠,这是最快的方法。

许多程序不能正确导出为csv格式。

如果这种情况经常发生,您可能需要在导入时修复源或更正信息

我也遇到了同样的问题,我用这种方法解决了。

 while (($data = fgetcsv($file, 0, "'t", '"', "''")) !== FALSE) {
    $val_arr = explode(",",$data[0]);   
    //here, you can get each column values from $val_arr    
   ....
 }

我不想在这个问题上表现得很差劲,我也没有足够的影响力来回复你的答案,但是这一行

$data[] = str_getcsv($buffer);

应该读

$data = str_getcsv($buffer);

你好,我有一个类似的pb,当在我的。csv中有'""时,它会剥离一些'",所以根据Sitansu上面所说的,我做了:

if (($handle = fopen($input_csv, "r")) !== FALSE)
{
    while (($buffer = fgets($handle)) !== false)
    {
        $buffer = str_replace(''""', '''"', $buffer);
        $row = str_getcsv($buffer);
        // Do stuff on cells.
    }
    ...
}

其他答案都不适合我。使用fgets()函数已经导致缓冲区变量中的数据被修剪,并且使得调用任何替换都没有意义。

我已经找到了工作解决方案在这里:https://stackoverflow.com/a/46342634/5356216

代码:

$handle = fopen($filepath, "r");
if ($handle === false) {
    //throw new someException('fopen error');
}
$rowNumber = 1;
while (($data = fgetcsv($handle, 0, ',', '"', "'0")) !== false) {
    yield $rowNumber => $data;
    $rowNumber++;
}
fclose($handle);

数据:

"id";"lastadded";"lastupdated";"aaa01";"aaa02";"aaa03";"status";"type";"aaa04";"aaa05";"aaa06";"aaa07";"aaa08";"aaa09";"aaa10";"printingallowed"
092916474;"2015-09-15 12:04:39.777";"2015-09-15 12:04:39.777";"";"";"Aaa vom 15.09.2015 11:43:57: Fusce non lectus sed sem varius sodales.";"";"Aaa_link";750265913;;"";"";"2015-09-15 12:04:39.777";;"Aaa vom 15.09.2015: Ut a urna eget mi maximus fringilla.";t
923789309;"2020-06-15 16:23:11.529";"2020-06-15 16:23:11.529";"";"";"Sehr geehrte xxxx yyyy,
In posuere elit eu orci malesuada fringilla. Vestibulum a massa ac libero vehicula rutrum. Donec tincidunt felis libero, non maximus libero laoreet ut?
Vivamus sed sem eu lacus consequat facilisis. Aenean nulla arcu, consectetur ut fringilla et, pharetra in purus.
Nam felis ante, '""win-win-Situation'"" volutpat non est at, tincidunt rhoncus libero.
Morbi dapibus erat rhoncus, fermentum metus id, mattis elit.
Etiam accumsan placerat arcu, et venenatis risus dignissim quis.
mit freundlichen Grüßen
Wxxxxx Wyyyyy
Zzzzzzzzzzzz
";"";"WwwAaa";750265913;;"";"";"2020-06-15 16:23:11.53";;"";t

带"'0"这段代码得到了预期的2条记录。

Array
(
    [0] => 092916474
    [1] => 2015-09-15 12:04:39.777
    [2] => 2015-09-15 12:04:39.777
    [3] => 
    [4] => 
    [5] => Aaa vom 15.09.2015 11:43:57: Fusce non lectus sed sem varius sodales.
    [6] => 
    [7] => Aaa_link
    [8] => 750265913
    [9] => 
    [10] => 
    [11] => 
    [12] => 2015-09-15 12:04:39.777
    [13] => 
    [14] => Aaa vom 15.09.2015: Ut a urna eget mi maximus fringilla.
    [15] => t
)
Array
(
    [0] => 923789309
    [1] => 2020-06-15 16:23:11.529
    [2] => 2020-06-15 16:23:11.529
    [3] => 
    [4] => 
    [5] => Sehr geehrte xxxx yyyy,
In posuere elit eu orci malesuada fringilla. Vestibulum a massa ac libero vehicula rutrum. Donec tincidunt felis libero, non maximus libero laoreet ut?
Vivamus sed sem eu lacus consequat facilisis. Aenean nulla arcu, consectetur ut fringilla et, pharetra in purus.
Nam felis ante, '"win-win-Situation'" volutpat non est at, tincidunt rhoncus libero.
Morbi dapibus erat rhoncus, fermentum metus id, mattis elit.
Etiam accumsan placerat arcu, et venenatis risus dignissim quis.
mit freundlichen Grüßen
Wxxxxx Wyyyyy
Zzzzzzzzzzzz
    [6] => 
    [7] => WwwAaa
    [8] => 750265913
    [9] => 
    [10] => 
    [11] => 
    [12] => 2020-06-15 16:23:11.53
    [13] => 
    [14] => 
    [15] => t
)

如果没有它,结果为9条记录:

Array
(
    [0] => 092916474
    [1] => 2015-09-15 12:04:39.777
    [2] => 2015-09-15 12:04:39.777
    [3] => 
    [4] => 
    [5] => Aaa vom 15.09.2015 11:43:57: Fusce non lectus sed sem varius sodales.
    [6] => 
    [7] => Aaa_link
    [8] => 750265913
    [9] => 
    [10] => 
    [11] => 
    [12] => 2015-09-15 12:04:39.777
    [13] => 
    [14] => Aaa vom 15.09.2015: Ut a urna eget mi maximus fringilla.
    [15] => t
)
Array
(
    [0] => 923789309
    [1] => 2020-06-15 16:23:11.529
    [2] => 2020-06-15 16:23:11.529
    [3] => 
    [4] => 
    [5] => Sehr geehrte xxxx yyyy,
In posuere elit eu orci malesuada fringilla. Vestibulum a massa ac libero vehicula rutrum. Donec tincidunt felis libero, non maximus libero laoreet ut?
Vivamus sed sem eu lacus consequat facilisis. Aenean nulla arcu, consectetur ut fringilla et, pharetra in purus.
Nam felis ante, '"win-win-Situation'"" volutpat non est at, tincidunt rhoncus libero.
)

Array
(
    [0] => Morbi dapibus erat rhoncus, fermentum metus id, mattis elit.
)

Array
(
    [0] => Etiam accumsan placerat arcu, et venenatis risus dignissim quis.
)

Array
(
    [0] => 
)
Array
(
    [0] => mit freundlichen Grüßen
)
Array
(
    [0] => Wxxxxx Wyyyyy
)
Array
(
    [0] => Zzzzzzzzzzzz
)
Array
(
    [0] => ;";WwwAaa"
    [1] => 750265913
    [2] => 
    [3] => 
    [4] => 
    [5] => 2020-06-15 16:23:11.53
    [6] => 
    [7] => 
    [8] => t
)