SplFileObject :: READ_CSV似乎没有正确读取CSV文件 - 忽略外壳"

Jam*_*olz 5 php csv splfileobject

在提出这个问题之前,我已经阅读了文档并广泛搜索了这个网站.

$file = new SplFileObject("/var/www/qacentre/compliance/compliance.csv");
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {

}
Run Code Online (Sandbox Code Playgroud)

示例CSV行;

"ABEL, TAMMY 454454","End of: ABEL, TAMMY 454454",QP544454,28/10/2012 11:41,"0811 unlawfully use, possess","STEPHENS, JEREMY 54544454",LINK OPERATIONS,Located details incorrect,Entity: FORD FALCON Reg #: Colour: White

我已经回显了输出,看起来它没有识别机箱字符(").我试图使用SetCSVControl虽然我使用的是默认机箱.我也试过逃避机箱字符SetCSVControl(因为我无法控制CSV文件我正在导出).

例如,当我打印第一列的结果时,我应该收到(ABEL,TAMMY 454454)("ABEL").

我读过这可能是我的语言环境设置的问题(en-GB,en-US; q = 0.8,en; q = 0.6)?

任何帮助都会很棒.

Eli*_*las 2

您可以使用 SplFileObject::fgetcsv

 public array SplFileObject::fgetcsv ([ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\" ]]] )
Run Code Online (Sandbox Code Playgroud)

它在示例中说;

<?php
$file = new SplFileObject("data.csv");
while (!$file->eof()) {
    var_dump($file->fgetcsv());
}
?>
Run Code Online (Sandbox Code Playgroud)

或者

<?php
$file = new SplFileObject("animals.csv");
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
    list($animal, $class, $legs) = $row;
    printf("A %s is a %s with %d legs\n", $animal, $class, $legs);
}
?>
Run Code Online (Sandbox Code Playgroud)

笔记:

%s 表示字符串,%d 是整数

根据您的具体情况

$file = new SplFileObject("/var/www/qacentre/compliance/compliance.csv");
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
var_dump($row);
}
Run Code Online (Sandbox Code Playgroud)

或者你可以只是

<?php

    $file = new SplFileObject("/var/www/qacentre/compliance/compliance.csv");
    while (!$file->eof()) {
        var_dump($file->fgetcsv());
    }
?>
Run Code Online (Sandbox Code Playgroud)