PHP - выделение текста из строки, содержащей HTML - PullRequest
5 голосов
/ 14 декабря 2010

Так что я делаю функцию поиска комментариев.Кто-то еще помог мне с запросом SQL .Я также хочу выделить текст результатов поискового запроса в результатах.

Результаты сохраняются в виде HTML внутри $variable.Как я могу, например, обернуть текст поискового запроса в тег <span>, не путая HTML.

, например.поисковый запрос может быть foo bar, а вывод может выглядеть следующим образом:

<p>bla bla foo bar bla</p>

, поэтому он должен выглядеть примерно так:

<p>bla <span class="highlight">foo bar</span> bla bla</p>

Ответы [ 7 ]

7 голосов
/ 14 декабря 2010

Простой поиск и замена:

$resultHTML = str_replace($searchString, '<span class="highlight">'.$searchString.'</span>', $resultHTML );
2 голосов
/ 15 декабря 2010

Я думаю, что это сложнее, чем кажется. Если мы ищем foo bar, тогда

<p>bla bla foo bar bla</p>

будет конвертировано в

<p>bla <span class="highlight">foo bar</span> bla bla</p>

а как насчет особых случаев? Возможно, foo bar соответствует тегу HTML:

<p>bla bla <span class="foo bar">foo bar</span> bla</p>

, который будет заменен на

<p>bla <span class="<span class="highlight">foo bar</span>">foo bar</span> bla bla</p>

Прав ли я с этим? Я не занимался этой проблемой, но я бы порекомендовал вам проверить документы CakePHP (да, я знаю, что вы не используете framework--) в помощнике Text, метод highlight(), который правильно обрабатывает теги HTML. Посмотрите на источник, сделайте снимок, и если он работает на вас, скопируйте его.

2 голосов
/ 14 декабря 2010
<?php

$result = "<p>Bla bla foo bar bla bla test x x x</p>";

$query = "foo bar";

// The important point here is, USE single quote ( ' ) in replacement part!!
echo preg_replace( "/($query)/", '<span class="highlight">${1}</span>', $result );
1 голос
/ 02 октября 2011

У меня был тот же вопрос, но я нашел это

Код создан для случайного изменения цветов подсветки, но это делается с помощью функции, поэтому его легко изменитьодин цвет:

     $color = '#FCB514'; //self::generate_colors();

Первое сообщение!

1 голос
/ 14 декабря 2010

Если вы убедитесь, что поисковый термин не содержит никакого HTML, вы можете пойти дальше и обернуть его в "<span>" с помощью str_replace().

Обратите внимание, что это один из очень редких случаев, когда работа с HTML с помощью строковых функций неплоха per se .

Если поисковый термин может содержать HTML (то есть выделение может охватывать границы тегов), все становится намного сложнее, и вам не удастся использовать умный ярлык, подобный приведенному выше.

1 голос
/ 14 декабря 2010
$searchString = 'foo bar';
$searchResult = '<p>bla bla foo bar bla</p>';

var_dump(str_replace($searchString, '<span>'.$searchString.'</span>', $searchResult));

var_dump(preg_replace('/'.$searchString.'/', '<span>'.$searchString.'</span>', $searchResult));
0 голосов
/ 10 августа 2017

текстовая тень: 1px 1px 1px # FCD600;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...