编辑:还有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文件将不会处理。最后没有尾随空格或行。
答案 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');
它奏效了,并成功读取了没有双引号的希伯来字母。