Странные символы в первом ряду массива после 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 и вы берете метку порядка байтов.