PHP: заменить недопустимые символы в строке utf-8 в - PullRequest
8 голосов
/ 16 сентября 2009

Как заменить (использовать регулярное выражение в PHP5) недопустимые символы в строке utf-8 на символы пробела?

Ответы [ 4 ]

22 голосов
/ 16 сентября 2009

использовать iconv

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

см. руководство .

Приветствия

6 голосов
/ 21 ноября 2011

С mbstring вы можете сделать:

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

Будет работать так, как вы хотите (заменить недопустимые символы пробелами), но, похоже, не будет работать, если вы хотите заменить недопустимые символы чем-то другим, например ?.

См .: Замена недопустимых символов UTF-8 на вопросительные знаки, mbstring.substitute_character, похоже, игнорируется

3 голосов
/ 05 октября 2011

Iconv не работал в моем случае (как и в других решениях), поэтому я нашел мой здесь в части «Проверка персонажа»:

http://webcollab.sourceforge.net/unicode.html

2 голосов
/ 25 мая 2016

Если вы столкнулись с проклятой ошибкой «Недопустимый символ» при использовании синтаксического анализатора PHP XML или JSON, вас это может заинтересовать.

К сожалению, синтаксические анализаторы PHP XML и JSON не игнорируют символы, отличные от UTF8, а останавливают и выдают довольно бесполезную ошибку. Я нашел приведенную ниже кодовую форму net и отлично работает для меня ..

//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ?
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
 '|[\x00-\x7F][\x80-\xBF]+'.
 '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
 '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
 '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
 '?', $some_string );

//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ?
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
 '|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...