Есть html страница:
<p> какой-то текст найди </p> <p> меня еще какой-то текст </p>
И есть фраза
"найди меня"
Требуется подсветить ее на данной странице. Фраза может пересекаться с любыми тегами, как в примере.
Как вариант должно получиться что-то типа такого:
<p>
какой-то текст <span class="red">найди</span>
</p>
<p>
<span class="red">меня</span> еще какой-то текст
</p>
Как это сделать средствам php?
Можно с помощью регулярных выражений, вот только искать будет только одно слово...
function search_replace($beginText,$search){
$patterns = "/(".$search.")+/iu";
$replace = "<span style='color:red'><em>$1</em></span>";// На что заменить
$endText = PREG_REPLACE($patterns,$replace,$beginText);// Замена
return $endText;
}
echo(searhh_replase("<p> какой-то текст найди </p> <p> меня еще какой-то текст </p>","найди"))
Если нигде не ошибся, то должно работать
$text = 'Длинный текст с тегами';
$match = 'найди меня';
$matchPos = 0;
$opentag = false;
$positions = [];
$curPos = [];
$startPos = 0;
for ($i = 0; $i < strlen($text); $i++) {
switch ($text[$i]) {
case '<':
if ($matchPos > 0)
$curPos[] = [$startPos, $i];
$opentag = true;
break;
case '>':
if ($matchPos > 0)
$startPos = $i;
$opentag = false;
break;
default:
if (!$opentag) {
if ($text[$i] === $match[$matchPos]) {
if ($matchPos === 0)
$startPos = $i;
else if ($matchPos === strlen($match) - 1) {
$curPos[] = [$startPos, $i];
$positions[] = $curPos;
$curPos = [];
$matchPos = 0;
}
$matchPos++;
} else {
$curPos = [];
$matchPos = 0;
}
}
}
}
for ($i = count(positions) - 1; $i >= 0; $i--) {
for ($j = count(positions[i]) - 1; $j >= 0; $j--} {
$text = substr_replace($text, '</span>', $positions[$i][$j][1]);
$text = substr_replace($text, '<span class="selected">', $positions[$i][$j][0]);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день, уважаемые пользователиПрошу помочь в ситуации
Каким способом зашифрован этот код? Обычные обфускаторы либо через eval , либо просто заменой переменных шифруют
Я хочу сделать небольшой чат с WebRTC и reactjs