Как заменить (использовать регулярное выражение в 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 не работал мой случай (как другие решения), поэтому я нашел здесь здесь часть «Проверка символов»:
Если вы столкнулись с проклятой ошибкой «Недопустимый символ» при использовании 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));