我正在尝试编写一个搜索和语法高亮显示器。我们假设我们有一个基本查询,即根据关键字查询国家/地区,例如 uni 。
现在,我正在使用Sphinx,从数据库中获取与此关键字匹配的结果,并且我使用不区分大小写的搜索。狮身人面像返回的结果如下:
Tanzania, United Republic of
United Arab Emirates
United Kingdom
United States
Igaunija
Estados unidos Mexicanos
我现在想要通过将关键字包装在<span>
中来突出显示这些字符串中的搜索关键字。
为实现这一目标,我试图做到以下几点:
$search='uni';
foreach($keyword as $text) { // $keyword is an array, containg each found result one by one
$text=str_replace($search, "<span>".$search."</span>", $text);
}
使用此代码,只有Iguanija
和Estados unidos Mexicanos
会突出显示,因为在其他所有情况下,关键字都以大写字母开头。如果我将str_replace
更改为str_ireplace
,则会突出显示每个搜索关键字,但在前几个条目中,大写U
将替换为小写u
},所以从United Kingdom
开始,我得到united Kingdom
。如何突出显示搜索关键字,并在结果中保留字符的大小写?
我想要的结果是这样的:
Tanzania, <span>Uni</span>ted Republic of
<span>Uni</span>ted Arab Emirates
<span>Uni</span>ted Kingdom
<span>Uni</span>ted States
Iga<span>uni</span>ja
Estados <span>uni</span>dos Mexicanos
答案 0 :(得分:3)
您可以使用正则表达式来保留源字符串的大小写。
<?php
$unis = <<< UNIS
Tanzania, United Republic of
United Arab Emirates
United Kingdom
United States
Igaunija
Estados unidos Mexicanos
UNIS;
var_dump(preg_replace('/(uni)/i','<span>$1</span>',$unis));
<强>输出强>
string(190) "Tanzania, <span>Uni</span>ted Republic of
<span>Uni</span>ted Arab Emirates <span>Uni</span>ted Kingdom
<span>Uni</span>ted States Iga<span>uni</span>ja Estados
<span>uni</span>dos Mexicanos"