Рассматриваемая функция (та, которую пользователь pilif разместил в связанном вопросе), по-видимому, была взята из этого комментария на странице mb_detect_encoding()
в руководстве по PHP.:
Как заявляет автор, функция предназначена только для «проверки, содержит ли строка символов UTF-8» и ищет только «не ascii многобайтовые последовательности в UTF-».8 ассортимент ».Следовательно, функция возвращает false (фактически, ноль), если ваша строка просто содержит простые символы ascii (например, текст на английском языке), что, вероятно, не то, что вам нужно.
Его функция была основана на другой функции в thisпредыдущий комментарий на той же странице, который фактически предназначен для проверки того, является ли строка UTF-8 и основан на это регулярное выражение , созданное кем-то в W3C.
Вот оригинальная, правильно работающая (я проверял) функция, которая сообщит вам, является ли строка UTF-8:
// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($string) {
// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\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);
} // function is_utf8