Странные символы в первом ряду массива после fgetcsv

У меня есть файл CSV, где первая "ячейка" это просто int, 9, в данном случае. Следующая строка 10 для первой "ячейки" и так далее. Когда я делаю $array = fgetcsv($file); первая ячейка первой строки имеет следующие странные символы перед значением: ˇ˛

Это портит мой импорт базы данных, так как эта ячейка должна содержать только int. Это происходит только в первой ячейке первой строки.

Любые идеи о том, почему это происходит и что я могу сделать, чтобы избежать этого?

3 ответа

Как и предполагали другие, странные символы - это обозначение порядка байтов (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 и вы берете метку порядка байтов.

Другие вопросы по тегам