PHP fget检测太多记录


PHP fgetdetecting too many records

我有以下csv文件:

"Id","Title","Body","Tags"
"101","this title","
'"">.</>"";
","c# asp.net excel table"

我想将其转换为数组,如下所示:

Array
(
    [0] => Array
        (
            [0] => Id
            [1] => Title
            [2] => Body
            [3] => Tags
        )
    [1] => Array
        (
            [0] => 101
            [1] => this title
            [2] => '"">.</>"";
            [3] => c# asp.net excel table
        )
)

我的代码是:

while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
        $data[$c] = strip_tags($data[$c]);
    }
    $result[$row] = $data;
    $row++;
}
fclose($handle);
return $result;

我的问题是我得到以下数组:

Array
(
    [0] => Array
        (
            [0] => Id
            [1] => Title
            [2] => Body
            [3] => Tags
        )
    [1] => Array
        (
            [0] => 101
            [1] => this title
            [2] => 
'">.</>"";
        )
    [2] => Array
        (
            [0] => ,c# asp.net excel table"
        )
)

通常,当字段中可能存在代码时,如何避免检测太多的recors(这是一个StackOverflow数据转储,因此某些文本字段具有各种编程代码)。

此字符串未正确转义:

"
'""&gt;.&lt;/&gt;"";
"

所有引号字符前面都必须有反斜杠(或已传递到适当参数中的其他转义字符。而且你不应该将 0 和逗号传递给 fgetcsv,它们已经是默认的:http://php.net/fgetcsv

尝试使用 CSV 打开文件,以确保其格式正确为 CSV。

如果 CSV 已损坏,则可以对解析的结果进行一些快速修复。例如:

while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
        $data[$c] = strip_tags($data[$c]);
    }
    if (count($data) == 3) {
        $data[1][2] .= $data[2].[0];
        unset($data[2]);
    }
    $result[$row] = $data;
    $row++;
}
fclose($handle);
return $result;