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


Strange characters in first row of array after fgetcsv

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

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

关于为什么会发生这种情况,以及我能做些什么来避免它,有什么想法吗?

正如其他人所建议的,奇怪的字符是字节顺序标记(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);
}

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

ȕ?123465

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

<meta charset="UTF-8">

结果变成:

123456

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

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