Skip to content

fgetcsv does not read the file correctly #9600

@f2h2h1

Description

@f2h2h1

Description

this bug only exists in Windows

The following code:

<?php

$csv = <<<EOF
"chinese test.","中文测试。"
"chinese, test.","中文,测试。"
"chinese test2","中文测试2"
"chinese, test2","中文,测试2"
EOF;
$file = fopen('php://memory', 'a+b');
fwrite($file, $csv);
fseek($file, 0, SEEK_SET);
$result = [];
while($row = fgetcsv($file, 0, ',', '"', '\\')) {
    if (is_array($row)) {
        $result[] = $row;
    } else {
        break;
    }
}
var_dump($result);

Resulted in this output:

array(2) {
  [0] =>
  array(5) {
    [0] =>
    string(13) "chinese test."
    [1] =>
    string(24) "中文测试。"
chinese"
    [2] =>
    string(7) " test.""
    [3] =>
    string(34) "中文,测试。"
chinese test2""
    [4] =>
    string(13) "中文测试2"
  }
  [1] =>
  array(2) {
    [0] =>
    string(14) "chinese, test2"
    [1] =>
    string(16) "中文,测试2"
  }
}

But I expected this output instead:

array(4) {
  [0]=>
  array(2) {
    [0]=>
    string(13) "chinese test."
    [1]=>
    string(15) "中文测试。"
  }
  [1]=>
  array(2) {
    [0]=>
    string(14) "chinese, test."
    [1]=>
    string(18) "中文,测试。"
  }
  [2]=>
  array(2) {
    [0]=>
    string(13) "chinese test2"
    [1]=>
    string(13) "中文测试2"
  }
  [3]=>
  array(2) {
    [0]=>
    string(14) "chinese, test2"
    [1]=>
    string(16) "中文,测试2"
  }
}

PHP Version

PHP 7.4.26 ( NTS Visual C++ 2017 x64 )

Operating System

Windows 10 21H2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions