За последние 24 часа нас посетили 20110 программистов и 1083 робота. Сейчас ищут 694 программиста ...

Подсветить слово в строке жирным шрифтом

Тема в разделе "Решения, алгоритмы", создана пользователем TeslaFeo, 30 янв 2017.

  1. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    Задача:

    Подсветить слово "яблоко" в строке "Яблоко красное, яблоко сладкое!!!" жирным шрифтом.
    Слово "яблоко" в строке встречается несколько раз и с разным регистром.
    Слово "яблоко" - ввёл пользователь, и он мог его ввести как угодно, в том числе и так: "ябЛоКО".
    А строка нашлась в БД и выводится на экран с подсветкой искомого слова, и должна сохранить свой изначальный регистр.

    str_ireplace с этой задачей не справляется, в т. ч. благодаря кириллице utf-8.
    Причины искать тут.

    Решение:

    PHP:
    1. <?php
    2.  
    3. $str = "Яблоко красное, яблоко сладкое!!!";
    4.  
    5. $word = "ЯбЛоКо";
    6.  
    7. function rpl($matches) {
    8.     return "<b>".$matches[0]."</b>";
    9. }
    10.  
    11. echo preg_replace_callback("/$word/iu", "rpl", $str); //<b>Яблоко</b> красное, <b>яблоко</b> сладкое!!!
    12.  
    13. ?>
    Спасибо, mahmuzar :cool:
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    На будущее - https://php.net/manual/ru/ref.mbstring
     
    TeslaFeo нравится это.
  3. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    PHP:
    1. $str = "Яблоко красное, яблоко сладкое!!!";
    2. $word = "ЯбЛоКо";
    3. function rpl($matches) {
    4.     return "<b>".$matches[0]."</b>";
    5. }
    6. echo preg_replace_callback("/$word/iu", "rpl", $str); //<b>Яблоко</b> красное, <b>яблоко</b> сладкое!!!
    а почему не так:

    PHP:
    1. $str = preg_replace("/$word/i", '<b>{1}</b>', $str);
    2. echo $str;