А очень просто!
Для этого вам понадобится вот такой вот код:
// читаем содержимое файла
$file = file_get_contents($path);
$sets = array(
"\xFE\xFF" => "UTF-16BE",
"\xFF\xFE" => "UTF-16LE",
"\xFE" => "UTF-16",
"\xFF" => "UTF-16",
"\xEF\xBB\xBF" => "UTF-8",
"\x2B\x2F\x76\x38\x2D" => "UTF-7",
"\x2B\x2F\x76\x38" => "UTF-7",
"\x2B\x2F\x76\x38" => "UTF-7",
"\x2B\x2F\x76\x2B" => "UTF-7",
"\x2B\x2F\x76\x2F" => "UTF-7",
"\xF7\x64\x4C" => "UTF-1",
"\x0E\xFE\xFF" => "SCSU",
"\xFB\xEE\x28" => "BOCU-1",
"\x00\x00\xFE\xFF" => "UTF-32BE",
"\xFF\xFE\x00\x00" => "UTF-32LE",
"\xDD\x73\x66\x73" => "UTF-EBCDIC",
"\x84\x31\x95\x33" => "GB-18030",
);
// предполагаем, что изначально файл у нас не в utf
$is_utf = false;
$source_charset = "";
foreach ($sets as $bom => $charset) {
// определяем битовый маркер
if (mb_substr($file, 0, mb_strlen($bom)) == $bom) {
// отрезаем битовый маркер и запоминаем кодировку
$file = mb_substr($file, mb_strlen($bom));
$source_charset = $charset;
$is_utf = true;
break;
}
}
if (!$is_utf){
// строка не в юникод кодировке, поэтому делаем соответсвующие, нужные вам преобразования
}else{
// строка в юникоде, конвертируем ее в utf-8 или же в любую другую удобную вам кодировку
$file = iconv($source_charset, "UTF-8", $file);
}
Таким образом вы сможете успешно определить кодировку присланного вам файла и распарсить его без лишних трудозатрат