我有一个PHP脚本,根据放置在网站搜索框中的术语在我的数据库上运行搜索。这会返回一段文字。假设我现在的搜索字词是"test block"
。我的结果的一个例子是这段文字:动态插入文本到字符串(PHP)
这是从数据库中使用 搜索查询收集的文本的测试块。
现在,我的问题是:我怎么能“亮点”的文本块内的搜索项,使用户可以看到为什么这个结果首先拉动。使用上面的例子,像下面这样就足够了:
这是文本试块这是从数据库中 聚集来自搜索查询。
我已经尝试了一些东西到目前为止将改变文本,但我遇到的真正问题必须与区分大小写。例如,如果我使用的代码:
$exploded = explode(' ', $search_terms);
foreach($exploded as $word) {
// I have to use str_ireplace so the word is actually found
$result = str_ireplace($word, '<b>' . $word . '</b>', $result);
}
它会通过我的$result
和bold
的话任何实例。这看起来是正确的,因为我想在我的第二个搜索结果的例子。但是,在该情况下,用户使用"Test Block"
代替"test block"
,搜索词将被资本化,并显示如下:
这是一个试块文字的这是从数据库中 聚集来自搜索查询。
这对我不起作用,特别是当用户使用小写字母搜索条件时,他们恰好落在转折开头。基本上,我需要做的是在字符串中找到单词,在单词的前面直接插入文本(本例中为<b>
),然后在保留单词(本例中为</b>
)后直接插入文本这个词本身被取代。我认为这规则preg_replace
和str_replace
,所以我真的坚持要做什么。
任何线索将不胜感激。
您可以使用preg_replace()与替换部分中的$ 1代表匹配的参数。 http://php.net/manual/en/function.preg-replace.php查看来自anyvie的评论devlibre dot fr – Waygood 2013-03-15 16:40:40
@Waygood谢谢你,指出我正确的方向。我猜我只是不明白'preg_quote()'足够的任何一个。 – burmat 2013-03-15 16:55:29