Пользователь загружает 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 такая же шляпа.