@Angelxalfa

Определение кодировки файла?

Здравствуйте! Столкнулся со странной ситуацией. При попытке определения кодировки файла, не зависимо от того какая она у файла в дейтсвительности, php определяеи ее как UTF-8
$file = file_get_contents('in.csv');
$encode  = mb_detect_encoding($file);
echo $encode;


При этом файл в кодировке win-1251 (проверял в notepad++) все равно определяется как UTF-8.

Почему такое происходит?

Просто я потом этот файл парсю и забиваю в базу Msql, и мне нужно привести его содержимое к определенной кодировке. Для этого:
fwrite($handle, iconv($encode, 'UTF-8', file_get_contents('in.csv')));


Но при этом если файл в UTF-8 - то все ок, а если в win-1251 - парсинг не проходит. Приходится менять на:
fwrite($handle, iconv('CP1251', 'UTF-8', file_get_contents('in.csv')));


Тогда для win-1251 проходит без проблем, для UTF-8 в базу сохраняются кракозябры вместо кирилицы...
  • Вопрос задан
  • 1091 просмотр
Решения вопроса 1
w999d
@w999d
Web-developer
ну, дело в том, что mb_detect_encoding не определяет язык или charset и может лишь определить явные ошибки - например, неверные последовательности для utf-8.
алсо из комментариев
If you try to use mb_detect_encoding to detect whether a string is valid UTF-8, 
use the strict mode, it is pretty worthless otherwise.

mb_detect_encoding($s, 'UTF-8', true)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
if (preg_match('//u', $string)) { /* у вас UTF-8 */ }

иногда такое работает, от настроек может зависеть
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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