PHP - 突出显示包含HTML的字符串中的文本

时间:2010-12-14 20:41:56

标签: php html string

所以我正在为评论做一个搜索功能。这里的其他人帮助我SQL query。 我还想做的是在结果中突出显示搜索查询文本。

结果以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 个答案:

答案 0 :(得分:7)

简单查找和替换:

$resultHTML = str_replace($searchString, '<span class="highlight">'.$searchString.'</span>', $resultHTML );

答案 1 :(得分:2)

<?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 );

答案 2 :(得分:2)

我认为这比它看起来更复杂。如果我们正在搜索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>

我是对的吗?我没有涉及这个问题,但是我建议你在Text帮助器中查看CakePHP的文档(是的,我知道你没有使用框架 - ),highlight()方法正确处理HTML标签。看看来源,试一试,如果它适合你,请继续复制。

答案 3 :(得分:1)

$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));

答案 4 :(得分:1)

如果您确保搜索字词本身不包含任何HTML,则可以直接将其包含在"<span>"的{​​{1}}的帮助下。

请注意,这是非常罕见的情况之一,通过字符串函数处理HTML本身本身

如果搜索词可以包含HTML(即突出显示可以跨越标签边框),那么事情会变得复杂得多,而且你不会像上面那样使用一个聪明的快捷方式。

答案 5 :(得分:1)

我有同样的问题,但我找到了this

代码构建为随机更改高亮颜色,但这是通过函数完成的,因此很容易修改为使用一种颜色:

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

第一篇文章!

答案 6 :(得分:0)

text-shadow:1px 1px 1px#FCD600;