А очень просто!
Для этого вам понадобится вот такой вот код:
// читаем содержимое файла $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); }
Таким образом вы сможете успешно определить кодировку присланного вам файла и распарсить его без лишних трудозатрат