我有一个 CSV 文件,在这种情况下,第一个“单元格”只是一个 int,9。下一行是第一个“单元格”的 10,依此类推。当我做$array = fgetcsv($file);
第一行的第一个单元格时,值前面有这些奇怪的字符:ˇ˛
它与我的数据库导入搞乱了,因为这个单元格应该只包含一个 int。它只发生在第一行的第一个单元格上。
关于为什么会发生这种情况以及我可以做些什么来避免它的任何想法?
我有一个 CSV 文件,在这种情况下,第一个“单元格”只是一个 int,9。下一行是第一个“单元格”的 10,依此类推。当我做$array = fgetcsv($file);
第一行的第一个单元格时,值前面有这些奇怪的字符:ˇ˛
它与我的数据库导入搞乱了,因为这个单元格应该只包含一个 int。它只发生在第一行的第一个单元格上。
关于为什么会发生这种情况以及我可以做些什么来避免它的任何想法?
正如其他人所建议的那样,奇怪的字符是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);
}
我今天遇到了这个问题。我让这些结果出现在第一行的第一个结果中:
123465
我的解决方案是将其添加到我的 HTML 头中:
<meta charset="UTF-8">
结果变成了:
123456
这是因为我的 CSV 文件是用 UTF-8 编码的,所以通过将字符集声明为 UTF-8,我能够得到预期的结果。
听起来您有一个 unicode 文件并且正在获取字节顺序标记。