How do I go about matching a Russian word in a string (also in Russian) in PHP?
So for example something like this:
$pattern = '/слово/';
preg_replace($pattern, $replacement, $string_in_russian)
I tried utf8_encode
and htmlentities
with UTF-8 flag for $pattern, but it didn't work. Should I also encode $string_in_russian?
Update: Suggestion for /u flag didn't work so I'm putting the actual code I need this for. It is from a glossary plugin for Wordpress (my site is properly setup to use Russian language, and it does work, but not in this instance). So here's the code
$glossary_title = $glossary_item->post_title;
$glossary_search = '/\b'.$glossary_title.'s*?\b(?=([^"]\*"[^"]\*")\*[^"]*$)/iu';
$glossary_replace = '<a'.$timestamp.'>$0</a'.$timestamp.'>';
$content_temp = preg_replace($glossary_search, $glossary_replace, $content, 1);
When I do a quick echo into HTML comment this is the kind of string I get for the pattern/\bсловоs*?\b(?=([^"]*"[^"]")[^"]*$)/iu
And well, that still doesn't seem to work. I thought maybe it was the "s" that was screwing me over (this level of regex is a bit beyond me but I assume it's there for possible plurals), but removing it didn't help.
Update #2: Okay so I decided to do a complete "blank slate" test - plain PHP file with some $content strings in English and Russian and target words to replace. Here is the code
$content_en = 'Nulla volutpat pretium nunc, ac feugiat neque lobortis vitae. In eu sapien sit amet eros tincidunt viverra. <b style="color:purple">Proin</b> congue hendrerit felis, et consequat neque ultrices lobortis. <b style="color:purple">Proin</b> luctus bibendum libero et molestie. Sed tristique lacus a urna semper eget feugiat lacus varius. Donec vel sodales diam. <b style="color:purple">Proin</b> fringilla laoreet purus, a facilisis nisi porttitor vel. Nullam ac justo ac elit laoreet ullamcorper vel a magna. Suspendisse in arcu sapien.';
$find_en = 'proin';
$replace_with_en = '<em style="color:red">REPLACEMENT</em>';
$glossary_search = '/\b'.$find_en.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)/iu';
$content_en_replaced = preg_replace($glossary_search, $replace_with_en, $content_en);
$content_ru = 'Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь <b style="color:purple">ваш</b> текст.. Здесь <b style="color:purple">ваш</b> текст.. Здесь <b style="color:purple">ваш</b> текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию.';
$find_ru = 'ваш';
$replace_with_ru = '<em style="color:red">Многие</em>';
$glossary_search = '/\b'.$find_ru.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)/iu';
$content_ru_replaced = preg_replace($glossary_search, $replace_with_ru, $content_ru);
And here is a screenshot of the output http://www.flickr.com/photos/iliadraznin/5372578707/
As you can see the English text had the target word replaced, while the Russian hasn't and the code is identical and I'm using the /u flag. The file is also UTF-8 encoded. Any suggestions? (and again, I tried removing the "s", still nothing)