You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在字符串中为指定单词添加HTML <strong>标签(忽略大小写)

Laravel中匹配指定单词(兼容大小写)并添加标签的实现方案

实现思路

要兼容单词的大小写变体(如filho/Filho/FILHO)并保留原大小写,核心是用正则表达式的不区分大小写匹配(i修饰符)结合捕获组,将匹配到的原单词用<strong>标签包裹,同时注意Laravel视图中HTML标签的输出规则。


方案一:控制器中预处理数据(推荐)

在控制器中对查询结果的字段统一处理,避免视图中重复逻辑,提升效率:

控制器代码修改

public function palavras(Request $request, $palavra = null)
{
    $getpalavra = palavras_br::where('slug', $palavra)->first();
    $targetWord = $getpalavra->palavras;

    $versiculos = nvi::where('palavra', 'RLIKE','[[:<:]]'.$targetWord.'[[:>:]]')
        ->paginate(20)
        ->map(function ($item) use ($targetWord) {
            // 转义目标单词中的正则特殊字符,避免语法错误
            $escapedWord = preg_quote($targetWord, '/');
            // 匹配单词边界内的目标单词(不区分大小写),保留原内容包裹标签
            $item->palavra = preg_replace("/\b($escapedWord)\b/i", '<strong>$1</strong>', $item->palavra);
            return $item;
        });

    return view('palavra', compact(['versiculos','getpalavra']));
}

视图代码修改

由于需要输出HTML标签,必须使用{!! !!}而非默认的{{ }}(后者会转义HTML):

@foreach($versiculos as $v)
    <p>{!! $v->palavra !!}</p>
@endforeach

方案二:视图中直接处理

如果仅需在视图中临时处理,可直接在循环内调用正则替换:

@foreach($versiculos as $v)
    <p>{!! preg_replace('/\b(' . preg_quote($getpalavra->palavras, '/') . ')\b/i', '<strong>$1</strong>', $v->palavra) !!}</p>
@endforeach

关键细节说明

  1. 正则边界\b:确保匹配独立单词,避免误匹配包含目标单词的其他词汇(如filhos不会被处理)
  2. preg_quote:转义目标单词中的正则特殊字符(如.、*等),防止正则表达式失效
  3. i修饰符:开启不区分大小写匹配,兼容所有大小写变体
  4. {!! !!}:Laravel中用于输出未转义的HTML内容,确保<strong>标签生效而非被转义为文本

内容的提问来源于stack exchange,提问作者Prinple Vrlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:00:58