Как проверить последовательность UTF в PHP? - PullRequest
1 голос
/ 24 октября 2011

После преобразования моего сайта в использование utf-8 я столкнулся с перспективой проверки всех входящих данных utf, чтобы обеспечить их достоверность и согласованность.

Кажется, существуют различные regexp и PHP API для определения, является ли строка utf, но те, что я видел, кажутся неполными (регулярные выражения, которые проверяют utf, но все же допускают недопустимые 3-ий байты и т. Д.).

Я также обеспокоен обнаружением (и предотвращением) слишком длинного кодирования, то есть символов ASCII, которые можно кодировать как многобайтовые последовательности utf.

Любые предложения или ссылки приветствуются!

Ответы [ 2 ]

6 голосов
/ 24 октября 2011

mb_check_encoding () предназначен для этой цели:

mb_check_encoding($string, 'UTF-8');
1 голос
/ 24 октября 2011

С помощью iconv вы можете сделать много вещей, которые могут сказать вам, является ли последовательность действительной UTF-8.

Приказав ей преобразовать из UTF-8 в ту же:*

Запрос длины строки в байтах:

$str = "\xfe\x20"; // Invalid UTF-8
if (@iconv_strlen($str, 'UTF-8') === false) {
    print("Input was not a valid UTF-8 sequence.\n");
}
...