Fopen在csv开头显示无效字符


fopen shows invalid characters at the beginning of csv

我在php中有这段代码,它打开一个CSV文件,将第一行读入数组并显示内容:

if (($tmp = fopen($file, "r")) !== FALSE) {
    $firstLine = fgetcsv($tmp, 0, ",");
    print_r($firstLine);
}

问题是打印的数组显示Array ( [0] => increment_id...这里应该是Array ( [0] => increment_id...。我不知道这些第一个字符来自哪里,因为当我用 notepad++ 打开csv文件时,它们不存在。我想我可以将文件转换为另一种编码,但这会很困难,因为它不是我编写的程序的输出,除非有一种方法可以用PHP重新编码它。

在notepad++中打开该文件,然后转到"Encoding"菜单,然后选择"Encode In UTF-8"。保存文件。这3个字节将被删除。

或者你可以这样做:

file_put_contents($file, str_replace("'xEF'xBB'xBF", "", file_get_contents($file)));
if (($tmp = fopen($file, "r")) !== FALSE) {
  $firstLine = fgetcsv($tmp, 0, ",");
  print_r($firstLine);
}

这将删除UTF-8签名从文件

现在您正在直接读取和解析CSV文件。更改方法:将文件作为字符串读取,然后将字符串解析为CSV,例如:

<?php
/*$file = "test.csv";
if (($tmp = fopen($file, "r")) !== FALSE) {
    $firs= fgetcsv($tmp, 0, ",");
    print_r($firstLine);
}*/
$handle = fopen( "test.csv", "r" );
$line = fgets( $handle );          // GET FIRST LINE IN FILE.
$line = str_getcsv( $line, "," );  // PARSE LINE AS CSV.
print_r( $line );
?>