У меня есть база данных с большим количеством строк. Некоторые из них правильно закодированы в UTF-8, а некоторые нет. Поэтому я установил скрипт, который выбирает 100 строк из БД. Следующая функция решает, содержит ли строка UTF-8 или нет (независимо от того, верна ли она):
function detectUTF8($text) {
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',
$text);
}
Вывод скрипта - это строки, содержащие UTF-8 и - после разрыва строки - строку utf8_decode (). Поскольку некоторые строки имеют двойное кодирование, я декодирую все строки, которые вы видите там.
В результате получается список с несколькими записями по 2 строки в каждой: одна правильная, другая неправильная. Вы можете увидеть это здесь . Но как мне определить, какой из них правильный?
Надеюсь, вы мне поможете. Заранее спасибо!