Я нашел полезную функцию в другом ответе, и мне интересно, может ли кто-нибудь объяснить мне, что она делает и надежна ли она. Я использовал mb_detect_encoding(), но это было неправильно при чтении из файла ISO 8859-1 в ОС Linux.
Эта функция работает во всех протестированных мной случаях.
Вот вопрос:Получить кодировку файла
Вот функция:
function isUTF8($string){
return preg_match('%(?:
[\xC2-\xDF][\x80-\xBF] # Non-overlong 2-byte
|\xE0[\xA0-\xBF][\x80-\xBF] # Excluding overlongs
|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # Straight 3-byte
|\xED[\x80-\x9F][\x80-\xBF] # Excluding surrogates
|\xF0[\x90-\xBF][\x80-\xBF]{2} # Planes 1-3
|[\xF1-\xF3][\x80-\xBF]{3} # Planes 4-15
|\xF4[\x80-\x8F][\x80-\xBF]{2} # Plane 16
)+%xs', $string);
}
Является ли это надежным способом обнаружения строк UTF-8? Что именно он делает? Можно ли сделать его более надежным?