@LionG

Есть ли лучшее решение для распознавания кодировки CSV при импорте?

Пользователь загружает CSV, его нужно спарсить и записать в БД.
Сначала все было хорошо тк использовался только UTF-8... но со временем пришлось добавить поддержку UTF-16 (но вышло костыльно). Теперь еще и нужно как то добавить windows-1251.

Казалось бы легче некуда - $file = iconv(mb_detect_encoding($file), 'utf-8', $file); или $file = utf8_encode($file);
Но mb_detect_encoding иногда не может определить кодировку (UTF-16 вообще ни разу не определил) тогда файл не парсится и получается пользователь не может загрузить файл.

До этого стоял такой костыль:
switch (mb_detect_encoding($file, array('utf-8', 'utf-16'))) {
	case 'UTF-8':
		//все ок, ничего не делаем
		break;
	default:
		//не определился - возможно UTF-16
		$file = iconv('UTF-16', 'UTF-8', $file);
		break;
}


Вариант с кучей проверок через mb_check_encoding "не работает"... багается так же как mb_detect_encoding (когда то определяет, когда то нет)

ForceUTF8 такая же шляпа.
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
@grinat
ICU CharsetDetector
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы