Подсветка поисковых запросов

Статус
В этой теме нельзя размещать новые ответы.

Wertos

Пьянь местная
Регистрация
13 Апр 2007
Сообщения
178
Реакции
39
Функция подсветки слов в тексте...
PHP:
function getHighlightedText($text, $query, $bold=false)
{
        if(!$query || !$text) return $text;

        $words = explode(' ', $query);

        foreach($words as $word)
        {
            $word = strip_tags(strtolower(trim(urldecode($word))));
            if (strlen($word) < 2) { continue; }
            if (strlen($word) == 2) { $queryes[] = $word; continue; }
            $queryes[] = $word;
        }
        unset($word);
        foreach ($queryes as $word)
        {
      $word = preg_replace('![^\w\d\s]*!','',$word);
      $b = ($bold) ? ' class="bold" ' : '';
      $pattern = "~(".$word.")~i";
          $replace = '<span style="color:#DD6900;"'.$b.'>$1</span>';
          $text = preg_replace($pattern, $replace, $text);
        }
        return $text;
}
Но если учесть что она обрабатывает HTML, то появляется проблема со ссылками, а именно
поисковое слово "microsoft" в данной ссылке
<a href="microsoft.com">xxxxx</a>
портит весь код ((
Есть какой нибудь вариант исправить это ?
Например исключить из замены, то что находиться между =" и " ?
 
Функция подсветки слов в тексте...
PHP:
function getHighlightedText($text, $query, $bold=false)
{
        if(!$query || !$text) return $text;

        $words = explode(' ', $query);

        foreach($words as $word)
        {
            $word = strip_tags(strtolower(trim(urldecode($word))));
            if (strlen($word) < 2) { continue; }
            if (strlen($word) == 2) { $queryes[] = $word; continue; }
            $queryes[] = $word;
        }
        unset($word);
        foreach ($queryes as $word)
        {
      $word = preg_replace('![^\w\d\s]*!','',$word);
      $b = ($bold) ? ' class="bold" ' : '';
      $pattern = "~(".$word.")~i";
          $replace = '<span style="color:#DD6900;"'.$b.'>$1</span>';
          $text = preg_replace($pattern, $replace, $text);
        }
        return $text;
}
Но если учесть что она обрабатывает HTML, то появляется проблема со ссылками, а именно
поисковое слово "microsoft" в данной ссылке
<a href="microsoft.com">xxxxx</a>
портит весь код ((
Есть какой нибудь вариант исправить это ?
Например исключить из замены, то что находиться между =" и " ?
а где у вас тут "href" ? если у вас создается тут ссылка, то вы должны по идеи поставить "style" именно для ссылки и тогда должно быть все ок
 
а где у вас тут "href" ? если у вас создается тут ссылка, то вы должны по идеи поставить "style" именно для ссылки и тогда должно быть все ок
Не создаётся ссылка, в html коде например, который попадает в $text есть ссылка с href, в котором имеется слово $query и тогда получиться
<a href="<span style="color:#DD6900;">microsoft</span>.com">xxxxx</a> это будет если $query = microsoft
 
А если полностью пропускать HTML теги?
PHP:
$pattern = "~(".$word.")~i";
Предлагаю поменять это шаблон на такой
PHP:
$pattern = "~\G(?:<[^>]*>|(?!$word).)*+\K$word~i";
 
нужно регулярное выражение указать Для просмотра ссылки Войди или Зарегистрируйся вмесло пробельного символа(как на примере) =" используйте.
 
А если полностью пропускать HTML теги?
Предлагаю поменять это шаблон на такой
PHP:
$pattern = "~\G(?:<[^>]*>|(?!$word).)*+\K$word~i";
теперь microsoft в href оно, не трогает, а то что в тексте вырезает...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху