用户fgetcsv有和没有条目引用

时间:2010-12-10 12:04:56

标签: php

编辑:还有fgetcsv的替代方案吗?

下面的代码处理csv文件,其中每个条目都由引号加上,并用逗号 ex: "Name","Last"分隔......我遇到的问题是有时csv文件在每个条目周围没有引号,只是用逗号分隔它ex: Name,Last。我该如何处理这两种类型?

$uploadcsv = "/temp/files/Load15.csv";
       $handle = fopen($uploadcsv, 'r');
       $column_headers = array();
$row_count = 0;
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {
  if ($row_count==0){
    $column_headers = $data;
  } else {
    print_r($data);
  }
  ++$row_count;
}

此csv有效:

"Name","Last"
"Mike","Aidens"
"Mike1","Aidens1"

此csv不起作用:

Name,Last
Mike,Aidens
Mike1,Aidens1

编辑:奇怪的错误...我尝试了一个没有引号的CSV文件中的小片段,但它确实有效。奇怪的是,我尝试了一大块然后整个CSV内容(这都是粘贴到一个新的test.csv文件中)并且它有效。两个文件都是相同的确切大小17,151kb,但原始的csv文件将不会处理。最后没有尾随空格或行。

5 个答案:

答案 0 :(得分:1)

将第4个参数设置为空字符串,它设置机箱,默认为"

fgetcsv($handle, 100000, ",", '');

答案 1 :(得分:1)

在php getcsv函数调用之前使用这行代码

ini_set('auto_detect_line_endings',TRUE);

答案 2 :(得分:0)

据我所知fgetcsv,无论是否有数据引号都可以正常工作。

答案 3 :(得分:0)

除非CSV文件格式不正确,否则这将“正常工作”。

换句话说,您无需担心每个字段是否都有引号,fgetcsv会为您处理此问题。

答案 4 :(得分:0)

有同样的问题,没有双引号就无法阅读希伯来语(utf-8)字母。它在命令行上运行良好(可以读取不带双引号的希伯来语),但是在Apache中,它仅读取具有双引号的标头,并返回空字符串,而不是其余行中根本没有双引号的希伯来字符串

在Apache中检查语言环境,并返回字母“ C”,但在命令行中返回“ LC_CTYPE = en_US.UTF-8; LC_NUMERIC = C; LC_TIME = C; LC_COLLATE = C; LC_MONETARY = C; LC_MESSAGES = C; LC_PAPER = C; LC_NAME = C; LC_ADDRESS = C; LC_TELEPHONE = C; LC_MEASUREMENT = C; LC_IDENTIFICATION = C“

因此,我在fgetcsv命令之前添加了以下行:

setlocale(LC_CTYPE, 'en_US.UTF-8');

它奏效了,并成功读取了没有双引号的希伯来字母。