Ответ 1
Во-первых, обратите внимание, что невозможно определить, принадлежит ли текст конкретной нежелательной кодировке. Вы можете проверить, действительно ли строка в данной кодировке.
Вы можете использовать проверку действительности 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
.
Вы не поделились исходным кодом, из которого возникает уведомление. Вы должны добавить его, если хотите более конкретное предложение.