У нас есть фрагмент регулярного выражения, который добавляет тег <strong>
вокруг ключевых слов, если они сами не входят в определенный закрывающий тег.Это всегда хорошо работало ...
foreach ($keywords as $keyword) {
$str = preg_replace("/(?!(?:[^<]+>|[^>]+(<\/strong>|<\/a>|<\/b>|<\/i>|<\/u>|<\/em>)))\b(" . preg_quote($keyword, "/") . ")\b/is", "<strong>\\2</strong>", $str, 1);
}
Так что, если ключевое слово было test
, это изменилось бы:
A test line
на:
A <strong>test</strong> line
, ноэто не изменится:
<a href="">A test line</a>
Как видите, список закрывающих тегов, которые мы хотим игнорировать, находится в регулярном выражении.
Мы столкнулись с проблемой со строкой, которая выглядит следующим образом::
<a href="">A test <em>line</em></a>
Это не признает закрытие </a>
или </em>
в этом отношении, так что получается как ...
<a href="">A <strong>test</strong> <em>line</em></a>
Что нам не нужносделать.Может кто-нибудь увидеть, есть ли исправление этого (и да, я знаю, что не анализировать HTML с правилом регулярных выражений, поэтому размещение ссылок на этот печально известный пост не является ответом; -))