所以我正在为评论做一个搜索功能。这里的其他人帮助我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>
答案 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;