PHP: заменить недопустимые символы в строке utf-8 в

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

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

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

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

ура

С помощью mbstring вы можете:

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

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

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

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

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

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

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

 //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 ); 

возможно, вы можете попробовать следующее:

 $cleaner_input = trim(strip_tags($input));