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



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

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

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)?

任何帮助都会很棒。

您可以使用SplFileObject::fgetcsv

 public array SplFileObject::fgetcsv ([ string $delimiter = "," [, string $enclosure = """ [, string $escape = "\" ]]] )

它在例子中说;

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

<?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 legsn", $animal, $class, $legs);
}
?>

注:

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

在您的具体情况下

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

或者你可以只是

<?php
    $file = new SplFileObject("/var/www/qacentre/compliance/compliance.csv");
    while (!$file->eof()) {
        var_dump($file->fgetcsv());
    }
?>

最新更新