php代码示例怎样实现搜索高亮_php搜索结果高亮代码示例【示例】
发布时间 - 2026-01-27 00:00:00 点击率:次用 preg_replace 实现关键词高亮需先转义用户输入(preg_quote($keyword, '/')),加 i 修饰符不区分大小写,用 '$0' 替换;须先 htmlspecialchars 原文防 XSS,再替换 mark 标签;中文注意全角/半角空格统一处理。
用 preg_replace 实现关键词高亮最直接
核心思路是把搜索词当作正则模式,用 preg_replace 替换为带 HTML 标签的高亮内容。注意必须转义用户输入,否则特殊字符(如 .、+、[)会破坏正则匹配甚至引发错误。
实操建议:
- 用
preg_quote($keyword, '/')转义关键词,斜杠/是正则分隔符,必须传入第二个参数 - 加
i修饰符实现不区分大小写匹配:/'.preg_quote($keyword, '/').'/'.'i' - 替换时用
'$0',$0表示完整匹配项,比捕获组更安全 - 若需高亮多个词,逐个循环调用
preg_replace,不要拼成一个正则——容易冲突且难以调试
为什么不用 str_replace 直接替换
更关键的是:如果用户搜的是 高亮后的内容含 正确做法: 漏掉这步,攻击者在搜索框输入 中文用户常混用全角空格( 解决方法: 真正难处理的是拼音缩写、同音词、繁简混输——那已超出高亮范畴,得上分词或 NLP 库了。str_replace 看似简单,但对大小写敏感、不支持模糊匹配、无法处理重叠关键词(比如搜索 php 和 phpstorm 同时存在时),而且容易误替换 HTML 标签里的内容(如 中的 php)。
a+b,str_rep 会原样去字符串里找 
a+b,而实际想匹配的是字面量 a+b,不是正则含义的“a 后跟一个或多个 b”。这时候不转义就出错,转义又得自己模拟正则逻辑——不如直接上 preg_replace。防止 XSS 的关键一步:输出前必须过滤
标签,如果原始文本来自用户输入(比如数据库读出的评论),直接 echo 会有 XSS 风险。不能只依赖高亮函数做防护。
htmlspecialchars($text, ENT_QUOTES, 'UTF-8') 对原文转义 变成
zuojiankuohaophpcn,不会被解析为标签)str_replace 把 zuojiankuohaophpcnmarkyoujiankuohaophpcn 和 zuojiankuohaophpcn/markyoujiankuohaophpcn 换回真实标签——仅限这组标签,其他仍保持转义 就可能触发脚本执行。中文搜索高亮要注意全角/半角和空格
)、半角空格( )、甚至不间断空格( )。如果关键词含空格,而原文用的是全角空格,preg_replace 默认不匹配。
str_replace([' ', "\xc2\xa0"], ' ', $str) 统一为空格(\xc2\xa0 是 UTF-8 下 的字节)mb_ereg_replace(需开启 mbstring)配合 u 修饰符,但性能略低,且 PHP 8.2+ 已废弃 mb_ereg_* 系列
# php
# word
# phpstorm
# html
# js
# 前端
# 字节
# 解决方法
# lsp
# 为什么
# xss
# echo
# 字符串
# 循环
# class
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
nodejs redis 发布订阅机制封装实现方法及实例代码
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Python文件操作最佳实践_稳定性说明【指导】
详解Oracle修改字段类型方法总结
如何解决hover在ie6中的兼容性问题
JS实现鼠标移上去显示图片或微信二维码
如何正确选择百度移动适配建站域名?
网站制作企业,网站的banner和导航栏是指什么?
WordPress 子目录安装中正确处理脚本路径的完整指南
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
IOS倒计时设置UIButton标题title的抖动问题
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何用wdcp快速搭建高效网站?
微信小程序 canvas开发实例及注意事项
如何确保FTP站点访问权限与数据传输安全?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何用腾讯建站主机快速创建免费网站?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
如何在IIS中配置站点IP、端口及主机头?
如何用景安虚拟主机手机版绑定域名建站?
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
php json中文编码为null的解决办法
Laravel Docker环境搭建教程_Laravel Sail使用指南
如何在万网开始建站?分步指南解析
非常酷的网站设计制作软件,酷培ai教育官方网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Python3.6正式版新特性预览
Java垃圾回收器的方法和原理总结
Laravel如何使用Vite进行前端资源打包?(配置示例)
C++时间戳转换成日期时间的步骤和示例代码
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Laravel如何使用Collections进行数据处理?(实用方法示例)
javascript中的try catch异常捕获机制用法分析
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
北京网站制作公司哪家好一点,北京租房网站有哪些?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何将凡科建站内容保存为本地文件?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
JavaScript实现Fly Bird小游戏
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
Laravel如何处理CORS跨域请求?(配置示例)

