Задача: Подсветить слово "яблоко" в строке "Яблоко красное, яблоко сладкое!!!" жирным шрифтом. Слово "яблоко" в строке встречается несколько раз и с разным регистром. Слово "яблоко" - ввёл пользователь, и он мог его ввести как угодно, в том числе и так: "ябЛоКО". А строка нашлась в БД и выводится на экран с подсветкой искомого слова, и должна сохранить свой изначальный регистр. str_ireplace с этой задачей не справляется, в т. ч. благодаря кириллице utf-8. Причины искать тут. Решение: PHP: <?php $str = "Яблоко красное, яблоко сладкое!!!"; $word = "ЯбЛоКо"; function rpl($matches) { return "<b>".$matches[0]."</b>"; } echo preg_replace_callback("/$word/iu", "rpl", $str); //<b>Яблоко</b> красное, <b>яблоко</b> сладкое!!! ?> Спасибо, mahmuzar
PHP: $str = "Яблоко красное, яблоко сладкое!!!"; $word = "ЯбЛоКо"; function rpl($matches) { return "<b>".$matches[0]."</b>"; } echo preg_replace_callback("/$word/iu", "rpl", $str); //<b>Яблоко</b> красное, <b>яблоко</b> сладкое!!! а почему не так: PHP: $str = preg_replace("/$word/i", '<b>{1}</b>', $str); echo $str;