答案:PHP通过preg_replace()函数结合正则表达式实现关键词高亮,使用preg_quote()转义特殊字符,'iu'修饰符支持不区分大小写和UTF-8,通过负向断言排除HTML标签内内容,避免重复替换与结构破坏,再用CSS定义.highlight样式完成前端突出显示。

在PHP中实现搜索关键词高亮,核心是将用户输入的关键词在显示内容中进行匹配,并用特定HTML标签包裹,再通过CSS设置样式突出显示。整个过程包括关键词提取、内容匹配替换和前端样式呈现三个部分。
使用PHP的字符串处理函数或正则表达式对目标文本中的关键词进行替换。推荐使用 preg_replace() 函数,支持不区分大小写匹配,并避免破坏原有HTML结构。
基本实现方式如下:
function highlightKeywords($text, $keywords) {
if (empty($keywords)) return $text;
// 转为数组,支持多个关键词
$words = is_array($keywords) ? $keywords : [$keywords];
foreach ($words as $word) {
if (trim($word) === '') continue;
// 使用正则表达式匹配关键词,添加<span>标签包裹
$pattern = '/' . preg_quote($word, '/') . '/iu'; // i不区分大小写,u支持UTF-8
$replace = '<span class="highlight">$0</span>';
$text = preg_replace($pattern, $replace, $text);
}
return $text;
}
说明:preg_quote() 防止关键词包含特殊正则字符;$0 表示匹配到的原内容;'iu'修饰符确保中文和大小写都能正确匹配。
直接替换可能导致已有的被再次处理,或误改页面中的HTML标签内关键词。可优化正则排除HTML标签内的内容:
function highlightKeywordsSafe($text, $keywords) {
$words = is_array($keywords) ? $keywords : [$keywords];
foreach ($words as $word) {
if (trim($word) === '') continue;
$quoted = preg_quote($word, '/');
// 只匹配非HTML标签内的文本(简单方式:排除<...>中的内容)
$pattern = '/(?<=^|>)(' . $quoted . ')(?=<|$)/iu';
$text = preg_replace($pattern, '<span class="highlight">$1</span>', $text);
}
return $text;
}
更严谨的做法可先用DOM解析跳过标签内容,但对一般场景,上述方式已足够。
N世界
一分钟搭建会展元宇宙
138
查看详情
配合CSS定义高亮样式,使关键词更醒目:
<style>
.highlight {
background-color: #FFF275;
padding: 2px 4px;
border-radius: 3px;
font-weight: bold;
}
</style>
可根据设计需求调整背景色、字体、边框等。例如使用黄色背景+深色文字是常见高亮方案。
假设从GET参数获取关键词并在文章中高亮:
$article = "这是一篇关于PHP编程的文章,介绍了PHP的基本语法和高亮实现方法。"; $keyword = $_GET['q'] ?? ''; echo highlightKeywords($article, $keyword);
访问 page.php?q=PHP 后,页面中所有“PHP”都会被包裹并高亮显示。
基本上就这些。注意过滤空关键词、防止XSS(如关键词含脚本),生产环境建议结合htmlspecialchars()做安全处理。实现不复杂但容易忽略细节。
以上就是php如何实现搜索关键词高亮_php关键词高亮替换逻辑与样式实现的详细内容,更多请关注其它相关文章!
相关文章:
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
AO3同人作品网入口 AO3搜索引擎官网永久地址
绝地鸭卫平a核爆刀流玩法攻略
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
在Go Martini框架中高效服务动态生成图像的实践指南
J*aScript中安全有效地处理localStorage字符串数据
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
如何在Promise链中有效终止错误处理后的执行
c++ 获取系统当前时间 c++时间戳获取方法
Lar*el 8 多关键词数据库搜索优化实践
C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责
怎么在mac上运行html代码_mac运行html代码方法【指南】
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
晋江读书网页版在线登录 晋江读书电脑版官网
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
12306选座如何查看座位示意图_12306座位示意图解读与使用
Excel文件在线转换快速入口 Excel在线格式转换网站
大麦的“候补”是什么意思 大麦候补购票规则【详解】
Django表单提交验证失败后保持字段值不刷新
Go语言HTML解析:利用Goquery精准获取指定元素内容
Centos/Linux 系统下安装 composer 的完整步骤
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践
J*a 递归快速排序中静态变量的状态管理与陷阱
实现全屏滚动与导航点:专业教程
神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
PHP中基于用户角色的页面访问控制实践
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
抖音网页版企业服务中心登录入口_抖音网页版企业登录平台
必由学官网首页入口 必由学教师网页版登录指南
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法
outlook中文官网入口地址 outlook官方中文版直达首页链接
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
J*aScript 字符串标签转换:使用正则表达式高效替换
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】