Замена не UTF8 символов - PullRequest
       22

Замена не UTF8 символов

2 голосов
/ 21 сентября 2011

В php мне нужно заменить все не-UTF8 символы в строке.Однако не некоторым эквивалентом (например, iconv функция с //TRANSLIT), а каким-то выбранным символом (например, "_" или "*").

Обычно я хочу, чтобы пользователь могчтобы увидеть позицию, где были найдены недопустимые символы.

Я не нашел ни одной функции, которая делает это, поэтому я собирался использовать:

  • использовать iconv с //IGNORE
  • выполните различие между двумя строками и вставьте нужный символ там, где не-UTF8, где

Видите ли вы лучший способ сделать это, есть ли некоторые функциив php, что может быть объединено, чтобы иметь такое поведение?

Спасибо за помощь.

1 Ответ

4 голосов
/ 21 сентября 2011

Вот две функции, которые помогут вам достичь чего-то близкого к тому, что вы хотите:

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

обратите внимание, что вы можете заменить замену (в настоящее время это «?» На что-либо еще, изменив строку, расположенную в preg_replace('blablabla', **'?'**, $some_string)

оригинальная статья: http://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...