iconv UTF-8 // IGNORE по-прежнему выдает ошибку «недопустимый символ» - PullRequest
14 голосов
/ 21 февраля 2012
$string = iconv("UTF-8", "UTF-8//IGNORE", $string);

Я думал, что этот код удалит недопустимые символы UTF-8, но выдает [E_NOTICE] "iconv(): Detected an illegal character in input string". Чего мне не хватает, как правильно убрать строку из недопустимых символов?

Ответы [ 3 ]

5 голосов
/ 21 февраля 2012

Выходной набор символов (второй параметр) должен отличаться от входного набора символов (первый параметр). Если они совпадают, то, если в строке есть недопустимые символы UTF-8, iconv отклонит их как недопустимые в соответствии с набором входных символов.

0 голосов
/ 02 ноября 2018

Я знаю 2 способа, как исправить строку UTF-8, содержащую недопустимые символы:

  1. Недопустимые символы будут заменены знаками вопроса ("?"):

$message = mb_convert_encoding($message, 'UTF-8', 'UTF-8');

Недопустимые символы будут удалены. L

$message = iconv('UTF-8', 'UTF-8//IGNORE', $message);

Второй метод на самом деле был описан в вопросе.Но это не производит E_NOTICE в моем случае.Я тестировал с различными поврежденными строками UTF-8 с error_reporting(E_ALL);, и результат всегда был ожидаемым.Возможно что-то изменилось с 2012 года. Я тестировал на PHP 7.2.9 Win.

0 голосов
/ 13 ноября 2013

Чтобы просто игнорировать уведомление, вы можете использовать «@»:

$string = @iconv("UTF-8", "UTF-8//IGNORE", $string);

...