Является ли тестирование строк UTF-8 в PHP надежным методом?

Я нашел полезную функцию в другом ответе, и мне интересно, может ли кто-нибудь объяснить мне, что она делает и надежна ли она. Я использовал 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? Что именно он делает? Можно ли сделать его более надежным?

5
задан Peter Mortensen 8 July 2019 в 14:45
поделиться