fgetcsv之后的第一行数组中的奇怪字符

时间:2013-11-21 15:12:39

标签: php csv fgetcsv illegal-characters

我有一个CSV文件,其中第一个“单元格”只是一个int,9,在这种情况下。对于第一个“单元格”,下一行是10,依此类推。当我$array = fgetcsv($file);时,第一行的第一个单元格在值前面有这些奇怪的字符:ˇ˛

它正在搞乱我的数据库导入,因为这个单元格应该只包含一个int。它只发生在第一行的第一个单元格上。

关于为什么会发生这种情况的任何想法以及我可以做些什么来避免它?

3 个答案:

答案 0 :(得分:2)

我今天遇到了这个问题。我在第一行的第一个结果中显示了这些结果:

  

123465

我的解决方案是将其添加到我的HTML头:

<meta charset="UTF-8">

结果随后变成:

  

123456

这是因为我的CSV文件是用UTF-8编码的,所以通过将字符集声明为UTF-8,我能够得到预期的结果。

答案 1 :(得分:2)

正如其他人所说,奇怪的字符是Byte Order Mark (BOM)。要删除它,您可以使用以下代码段:

if (mb_detect_encoding($value) === 'UTF-8') {
    // delete possible BOM
    // not all UTF-8 files start with these three bytes
    $value = preg_replace('/\x{EF}\x{BB}\x{BF}/', '', $value);
}

答案 2 :(得分:1)

听起来你有一个unicode文件,正在拿起字节顺序标记。