【问题标题】:Highlight searched char/string in haystack and keep case在 haystack 中突出显示搜索到的字符/字符串并保留大小写
【发布时间】:2018-07-12 15:44:43
【问题描述】:

目前,我编写了一个返回名称的 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;
}

还有什么想法吗?

【问题讨论】:

    标签: php regex string preg-replace


    【解决方案1】:

    preg_replace/i(不区分大小写标志)和捕获组一起使用:

    preg_replace('/('.preg_quote($needle).')/i', '<b>\1</b>', $haystack);
    

    preg_quote 用于转义针中可能出现的任何保留字符。

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 2011-03-18
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多