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

PHP-突出显示包含HTML的字符串中的文本,php,html,string,Php,Html,String,所以我在做一个评论搜索功能。这里有人帮我做这件事。 我还想做的是突出显示结果中的搜索查询文本 结果以HTML格式存储在$变量中。 例如,如何将搜索查询文本包装在标记中,而不会弄乱html 例如,搜索查询可以是foo bar,输出可以如下所示: <p>bla bla foo bar bla</p> bla bla foo bar bla 所以应该是这样的: <p>bla <span class="highlight">foo bar</sp

所以我在做一个评论搜索功能。这里有人帮我做这件事。 我还想做的是突出显示结果中的搜索查询文本

结果以HTML格式存储在
$变量中。
例如,如何将搜索查询文本包装在
标记中,而不会弄乱html

例如,搜索查询可以是
foo bar
,输出可以如下所示:

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

所以应该是这样的:

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

$searchString='foo bar';
$searchResult='bla bla foo bar bla

'; 变量转储(str_替换($searchString、.$searchString.'、$searchResult)); 变量转储(preg_replace('/'.$searchString'/'、'.$searchString'.'和$searchResult));
如果您确保搜索词本身不包含任何HTML,您可以在
str_replace()
的帮助下直接将其包装在

请注意,这是极少数通过字符串函数处理HTML本身并不糟糕的情况之一


如果搜索词可以包含HTML(即,突出显示可以跨越标记边框),事情会变得复杂得多,并且您无法通过上面这样一个聪明的快捷方式逃脱。

简单查找和替换:

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

我认为这比看起来更复杂。如果我们正在搜索
foo bar
,那么

<p>bla bla foo bar bla</p>
将被替换为

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


我说的对吗?我还没有讨论过这个问题,但我建议您在文本助手中检查CakePHP的文档(是的,我知道您没有使用框架--),该方法可以正确处理HTML标记。看看源代码,试一试,如果它对您有效,请继续复制它。

我有同样的问题,但我发现

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

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


第一个帖子

文本阴影:1px 1px 1px#FCD600

还有一个问题。例如,输出可以有
,然后标记会分解。@Alex:这是真的,这正是为什么使用基本字符串操作通常被认为是处理HTML的禁忌的原因。这种简单化的方法是否可行,很大程度上取决于您的数据。如果评论可以包含任何HTML,那么你很快就会进入“复杂得多”一角。别忘了还有一个不区分大小写的版本。。。是的,这种情况可能发生。我应该在问题中提到这一点。总之,我找到了一个更简单的解决方案,使用jQuery!:你也可以用双引号,只是要避开它们。更多信息-
<p>bla <span class="highlight">foo bar</span> bla bla</p>
<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>
     $color = '#FCB514'; //self::generate_colors();