Ben dizeleri dolu bir veritabanı var. Bazıları doğru UTF-8 kodlanmış bazıları değildir. Bu nedenle, ben db 100 dizeleri seçen bir senaryo kurdum. Aşağıdaki fonksiyonu (doğru ise olursa olsun) bir dize UTF-8 ya da içeren karar verir:
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);
}
Senaryonun çıkışı UTF-8 içeren bu dizeleri ve - bir satır aradan sonra - utf8_decode () dize. Bazı dizeleri çift kodlanmış olduğundan, ben orada görebiliyorum tüm dizeleri deşifre.
Sonuç 2 dizeleri her bazı girişleri ile bir listesi: bir diğeri yanlış, doğru. Bunu görebilirsiniz here. Ama nasıl doğru hangisinin belirliyorsunuz?
Bana yardımcı olur umarım. Şimdiden teşekkürler!