Почему не работает замена? Всем привет. Есть такой код:$search = "є"; //Нужно это заменить $replace = "есть"; //На это $string = "Какой-то є текст"; //В этом тексте echo preg_replace('/(\b)'.$search.'(\b)/i','$1' . $replace .'$2', $string); Но в итоге, почему-то не работает. С русским буквами все ок, а вот с украинскими такая беда? Как пофиксить?
Проблема заключается в том, что вы используете кодировку UTF-8, в которой украинские буквы занимают два байта. Поэтому вы не можете использовать \b для поиска границы слова, потому что он ищет границы слова по одному байту.
Вместо этого вы можете использовать следующий код:
search="є";//Нужноэтозаменитьsearch = "є"; //Нужно это заменить search="є";//Нужноэтозаменитьreplace = "есть"; //На это $string = "Какой-то є текст"; //В этом тексте echo preg_replace('/(?<!\pL)'.$search.'\b/ui', $replace, $string);
В этом коде мы используем модификаторы u (UTF-8) и i (регистронезависимый поиск). Мы также используем \pL для поиска буквенных символов, чтобы обойти проблему с двубайтовыми украинскими буквами.
Проблема заключается в том, что вы используете кодировку UTF-8, в которой украинские буквы занимают два байта. Поэтому вы не можете использовать \b для поиска границы слова, потому что он ищет границы слова по одному байту.
Вместо этого вы можете использовать следующий код:
search="є";//Нужноэтозаменитьsearch = "є"; //Нужно это заменитьsearch="є";//Нужноэтозаменитьreplace = "есть"; //На это
$string = "Какой-то є текст"; //В этом тексте
echo preg_replace('/(?<!\pL)'.$search.'\b/ui', $replace, $string);
В этом коде мы используем модификаторы u (UTF-8) и i (регистронезависимый поиск). Мы также используем \pL для поиска буквенных символов, чтобы обойти проблему с двубайтовыми украинскими буквами.