Почему не работает замена? Всем привет.
Есть такой код:$search = "є"; //Нужно это заменить
$replace = "есть"; //На это
$string = "Какой-то є текст"; //В этом тексте
echo preg_replace('/(\b)'.$search.'(\b)/i','$1' . $replace .'$2', $string);
Но в итоге, почему-то не работает. С русским буквами все ок, а вот с украинскими такая беда? Как пофиксить?

21 Авг 2019 в 06:32
260 +1
0
Ответы
1

Проблема заключается в том, что вы используете кодировку UTF-8, в которой украинские буквы занимают два байта. Поэтому вы не можете использовать \b для поиска границы слова, потому что он ищет границы слова по одному байту.

Вместо этого вы можете использовать следующий код:

search="є";//Нужноэтозаменитьsearch = "є"; //Нужно это заменить
search="є";//Нужноэтозаменить
replace = "есть"; //На это
$string = "Какой-то є текст"; //В этом тексте
echo preg_replace('/(?<!\pL)'.$search.'\b/ui', $replace, $string);

В этом коде мы используем модификаторы u (UTF-8) и i (регистронезависимый поиск). Мы также используем \pL для поиска буквенных символов, чтобы обойти проблему с двубайтовыми украинскими буквами.

20 Апр 2024 в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир