【问题标题】:Strange characters in first row of array after fgetcsvfgetcsv 后数组第一行中的奇怪字符
【发布时间】:2013-11-21 15:12:39
【问题描述】:

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

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

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

【问题讨论】:

  • CSV 文件是否使用 BOM 标头保存?
  • @MarkBaker 这是从 MSSQL 数据库导出并导入到 OpenOffice 并再次保存为 CSV 的 CSV。如何判断它是否与 BOM 表头一起保存?
  • 大多数支持此类内容的文本编辑器都有一个选项,可以让您查看设置的编码......例如,我使用 NotePad++,菜单上有一个 encoding 选项显示我当前的编码并允许我更改它
  • @MarkBaker 在没有 BOM 的情况下保存为 UTF-8 有效。可能想让它成为一个答案,以便它可以被接受。

标签: php csv fgetcsv illegal-characters


【解决方案1】:

正如其他人所说,奇怪的字符是Byte Order Mark (BOM)。为了删除它,您可以使用以下 sn-p:

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】:

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

    123465

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

    <meta charset="UTF-8">
    

    结果变成了:

    123456

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-03-12
        • 1970-01-01
        • 2015-08-07
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多