我有这段代码来读取CSV文件。
$csv = array_map('str_getcsv', file($file));
var_dump($csv[0][0]).PHP_EOL;
...
echo $a['Type'];exit;
然而,当我尝试将第一行标题列用于数组数组的键时,我收到错误,因为第一列&#39;键入&#39;还包括BOM。 BOM包含在文件内容中,然后包含在数组键中。看,它认为字符串&#39; Type&#39;是7个字符而不是4个字符,因为它包含BOM <U+FEFF>
。
string(7)&#34; Type&#34;
PHP注意&#39; yii \ base \ ErrorException&#39;使用消息&#39;未定义的索引:输入&#39;
file()
功能没有UTF选项。如何使用file()
读取UTF文件?
答案 0 :(得分:1)
我个人避免使用file
,因为它会将整个文件读入内存。但假设您对此很好,请手动过滤BOM:
$lines = file($file);
$lines[0] = preg_replace(sprintf('/^%s/', pack('H*','EFBBBF')), $lines[0]);
$csv = array_map('str_getcsv', $lines);
未经测试,这是我使用的替代方案:
$fp = fopen($file, 'r');
fseek($fp, 3);
while ($line = fgetcsv($fp)) {
$csv[] = $line;
}
fclose($fp);
如果BOM可能不存在,那么您需要加强此算法。