Во-первых, обратите внимание, что невозможно определить, принадлежит ли текст к определенной нежелательной кодировке.Вы можете проверить только допустимость строки в заданной кодировке.
Вы можете использовать проверку достоверности UTF-8, которая доступна в preg_match
[Руководство по PHP] начиная с PHP 4.3.5.Он вернет 0
(без дополнительной информации), если задана неверная строка:
$isUTF8 = preg_match('//u', $string);
Другая возможность mb_check_encoding
[Руководство по PHP] :
$validUTF8 = mb_check_encoding($string, 'UTF-8');
Еще одна функция, которую вы можете использовать: mb_detect_encoding
[Руководство по PHP] :
$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));
Важно установить для параметра strict
значение true
.
Дополнительно iconv
[Руководство по PHP] позволяет вам изменять / отбрасывать недопустимые последовательности на лету.(Однако, если iconv
встречает такую последовательность, она генерирует уведомление; это поведение нельзя изменить.)
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL;
Вы можете использовать @
и проверить длину возвращаемой строки:
strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string));
Проверьте также примеры на странице справочника iconv
.
Вы не передали исходный код, из которого получено уведомление.Вы должны добавить его, если хотите более конкретное предложение.