Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP fgetcsv-检测到太多记录_Php_Csv - Fatal编程技术网

PHP fgetcsv-检测到太多记录

PHP fgetcsv-检测到太多记录,php,csv,Php,Csv,我有以下csv文件: "Id","Title","Body","Tags" "101","this title"," \"">.</>""; ","c# asp.net excel table" 我想将其转换为数组,如下所示: Array ( [0] => Array ( [0] => Id [1] => Title [2] => B

我有以下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;
while(($data=fgetcsv($handle,0,“,”))!==FALSE){
$num=计数($data);
对于($c=0;$c<$num;$c++){
$data[$c]=带标签($data[$c]);
}
$result[$row]=$data;
$row++;
}
fclose($handle);
返回$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"
        )

)
数组
(
[0]=>阵列
(
[0]=>Id
[1] =>标题
[2] =>主体
[3] =>标签
)
[1] =>阵列
(
[0] => 101
[1] =>此标题
[2] => 
\">."";
)
[2] =>阵列
(
[0]=>,c#asp.net excel表格”
)
)

一般来说,如果字段中可能存在代码(这是StackOverflow数据转储,因此某些文本字段具有各种编程代码),如何避免检测到太多记录程序。

此字符串未正确转义:

"
\""&gt;.&lt;/&gt;"";
"
所有quote字符前面必须有反斜杠(或其他传递到相应参数的转义字符)。
您不应该将0和逗号传递给fgetcsv,它们已经是默认值:

尝试使用打开文件,以确保其格式正确为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;
while(($data=fgetcsv($handle,0,“,”))!==FALSE){
$num=计数($data);
对于($c=0;$c<$num;$c++){
$data[$c]=带标签($data[$c]);
}
如果(计数($data)==3){
$data[1][2]。=$data[2][0];
未设置($data[2]);
}
$result[$row]=$data;
$row++;
}
fclose($handle);
返回$result;

因此,解决方案是搜索所有引号字符,并添加反斜杠,除非它与我正确的行分隔符(“,”)匹配?感谢您的提示。CSVed在解析数据时也遇到问题,并检测到大量错误。我不确定下一步该怎么做…尝试修复解析的结果。具体情况将视情况而定。