此刻,我已经编写了一个返回名称的ajax搜索程序。到目前为止,一切正常。但是,我只想用<strong>
标签突出显示搜索到的字符/字符串,但要保留这种情况,因为我是从SQL中获取的:
Example:
Search Term: M
SQL result: 1. Max Mustermann, 2. Tom Maier
What I want:
<b>M</b>ax <b>M</b>uster<b>m</b>ann
Tom <b>M</b>aier
意味着,当我从数据库中获取数据时,我想保留这种情况,只需将标签放在字符或字符串周围。
这是我到目前为止所拥有的,但这不是我想要的。如果我搜索“ m”,则第一个字符也是小写,尽管在数据库中实际上是大写。
public function highlightKeyword($haystack, $needle)
{
$string = mb_strtolower($haystack);
$string = $this->mb_ucfirst($string);
$string = preg_replace("/(".$needle.")/i", sprintf("<strong>".strtolower($needle)."</strong>"), $string);
return $string;
}
public function mb_ucfirst($string, $encoding)
{
$strlen = mb_strlen($string, $encoding);
$firstChar = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding);
return mb_strtoupper($firstChar, $encoding) . $then;
}
还有其他想法吗?
答案 0 :(得分:1)
将preg_replace
与/i
(不区分大小写的标志)和捕获组一起使用:
preg_replace('/('.preg_quote($needle).')/i', '<b>\1</b>', $haystack);
preg_quote
可以避开针中可能出现的所有保留字符。