Po pierwsze, należy pamiętać, że nie można wykryć, czy tekst należy do określonego niepożądanego kodowania. Możesz tylko sprawdzić, czy łańcuch jest poprawny w danym kodowaniu.
Możesz skorzystać z sprawdzania poprawności UTF-8, które jest dostępne w preg_match
[PHP Manual] od wersji 4.3.5. powróci 0
(bez dodatkowych informacji), jeżeli nieprawidłowy ciąg jest podana:
$isUTF8 = preg_match('//u', $string);
Inną możliwością jest mb_check_encoding
[PHP Manual]:
$validUTF8 = mb_check_encoding($string, 'UTF-8');
Inną funkcją można użyć jest mb_detect_encoding
[PHP Manual]:
$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));
Ważne jest ustawienie parametru strict
na true
.
Dodatkowo, iconv
[PHP Manual] pozwala na zmianę/odrzucenie nieprawidłowych sekwencji w locie. (Jednakże, jeśli iconv
spotkania takiej sekwencji, generuje powiadomienie; takie zachowanie nie może być zmieniony.)
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL;
Można użyć @
i sprawdzić długość łańcucha powrotnej:
strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string));
Sprawdź przykłady na stronie podręcznika iconv
.
Nie udostępniono kodu źródłowego, z którego pochodzi powiadomienie. Powinieneś go dodać, jeśli chcesz bardziej konkretnej sugestii.
Tymczasem znalazłem to: http: // stackoverflow.com/questions/4407854/how-to-detect-if-have-to-apply-utf8-decode-or-encode-on-a-string – rsk82