fopen在csv的开头显示无效字符

时间:2016-06-28 19:47:47

标签: php arrays 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重新编码它。

2 个答案:

答案 0 :(得分:2)

在Notepad ++中打开该文件,而不是转到“编码”菜单,而不是选择“在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签名。

答案 1 :(得分:0)

现在您正在直接阅读并解析文件为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 );
?>