2016-06-23 2 views
0

У меня есть строки, содержащие символы, такие как \x{1f601}, которые я хочу заменить некоторым текстом.str_replace для символов UTF-16

Когда я делаю это с помощью preg_replace, было бы что-то вроде:

preg_replace('/\x{1f601}/u', '######', $str) 

Однако, это не похоже на работу с str_replace:

str_replace("\x{1f601}", '######', $str) 

Как я могу сделать такие замены работы с str_replace?

+0

Ваш текст буквально содержит 9-значную длинную строку «\ x {1f601}» или содержит символ «»? И как UTF-16 играет в это? – deceze

+0

Вы говорите, что 'preg_replace' работает, но' str_replace' не делает? Также * UTF-16 * - это способ кодирования символов Unicode. У вас работает PHP в режиме UTF-8? – roeland

ответ

2

preg_replace является Regex парсер/Заменитель, который является Perl движок регулярных выражений, но str_replace является НЕ и заменяет вещи с открытым текстом методом

preg_replace вы получили можно увидеть здесь, в regex101, заявив, что:

соответствует символу с позицией 0x1f601 (128513 десятичной или восьмеричной 373001) в наборе символов

Но это может быть передано на поиск и замену без регулярных выражений, путем копирования и вставки этого символа смайлика непосредственно в str_replace.

$str = str_replace("", '######', $str) 

Или, читая deceze's comment, который дает вам чистую, небольшое решение.

Дополнительно:

Вы используете набор символов, который является нестандартным, так что может быть полезно для вас, чтобы исследовать Mb_Str_replace (GitHub), который является accompanyment (но не непосредственно из) mb_string коллекции Функции PHP.

Наконец:

Почему вам нужно сделать строку замены Whe вы уже делаете регулярное выражение preg_replace? Также прочитайте руководство, в котором говорится об этом достаточно четко.

+2

Вы * можете * написать '' \ xF0 \ x9F \ x98 \ x81 "как эквивалент строки, без необходимости копировать и вставлять и беспокоиться о кодировке исходного кода ... – deceze

+0

@deceze Я обновил свой ответ :) – Martin

+0

Обратите внимание, что приведенное выше является строковым литералом для символа * UTF-8 с кодировкой *. Если строка OP работает, на самом деле не кодируется в кодировке UTF-8, они должны будут адаптировать ее к любым кодировкам, в которых они нуждаются ... – deceze

Смежные вопросы