Мне нужно выделить результат поиска в тексте на русском языке, но str_ireplace () просто не работает, когда запрос имеет другой случай. Я пробовал все, что я нашел в руководстве , но ничего не работает. Вот что я пробовал:
<?php setlocale (LC_ALL, 'ru_RU'); $query = 'ПрОбЛеМа'; $result = 'Эта проблема нам не знакома.'; $result = str_ireplace($query, "<strong>$query</strong>", $result); // does not work $result = preg_replace("/($query)/i", '<strong>$1</strong>', $result); // does not work $result = mb_eregi_replace("$query", "<strong>$query</strong>", $result); // does not work $result = ext_str_ireplace($query, "<strong>$query</strong>", $result); // from php.net - does not work $result = highlightStr($result, $query); // from php.net - does not work ?>
Есть ли способ заставить его работать? Я здесь отчаянный.
PHP 5.3.3
Если вы добавите модификатор u (unicode) в preg_replace, он должен работать:
$result = preg_replace("/($query)/ui", '<strong>$1</strong>', $result);
вы можете использовать mb_eregi_replace, если вы используете не ASCII / multi Byte
но удалите "
$result = mb_eregi_replace($query, "<strong>$query</strong>", $result);
вы также можете установить свою кодировку:
mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8");
Снизить на замену:
function mb_str_ireplace ($search, $replace, $subject, &$replacements) { return preg_replace("/$search/ui", $replace, $subject, -1, $replacements); }