php动态网站开发怎样过滤敏感词_PHP动态网站敏感词过滤法【方案】
发布时间 - 2026-01-25 00:00:00 点击率:次敏感词过滤应优先用str_replace处理高频固定词,再对关键字段用preg_replace加\b和i修饰符精准匹配;词库需缓存避免重复加载;HTML内容须先strip_tags再过滤,最后htmlspecialchars防XSS;多字节字符串操作必须显式指定UTF-8编码。
敏感词过滤该用 str_replace 还是 preg_replace
直接用 str_replace 最快,但只能做简单替换,不支持模糊匹配、大小写无关或词边界控制;pre 灵活,能加 
\b 防止“苹果”误伤“苹果手机”里的“苹果”,但性能差、正则写错容易绕过。生产环境建议先用 str_replace 批量处理高频固定词,再对关键字段(如用户昵称、评论)用 preg_replace 加 i 和 \b 修饰符做精准过滤。
常见错误:直接 preg_replace('/苹果/', '*', $text) —— 会把“苹果手机”变成“*手机”;正确写法是 preg_replace('/\b苹果\b/i', '*', $text)。
敏感词库怎么加载才不拖慢页面
别每次请求都 file_get_contents('sensitive_words.json') 或查数据库。PHP-FPM 模式下,把词库读进 $_SERVER 或 APCu 缓存里,首次加载后复用;如果是 Swoole 或 PHP 8.1+,可存在 static 属性或 Swoole\Table 中。词库文件本身建议用 PHP 数组格式(sensitive_words.php),避免 JSON 解析开销。
- 小词库(return ['政治', '暴力', '*']; +
include - 大词库(>5000 条):用 APCu 缓存,键名加版本号,比如
apcu_store('sensitive_words_v2', $words) - 绝对别在循环里反复
file()或json_decode()
用户提交的 HTML 内容怎么安全过滤敏感词
先剥离 HTML 标签再过滤,否则 政治 可能绕过。用 strip_tags() 最稳妥,别信正则去 HTML —— 正则根本解析不了嵌套或畸形标签。过滤完再重新渲染(如果必须保留格式),或直接转义输出。
立即学习“PHP免费学习笔记(深入)”;
关键顺序不能错:$plain = strip_tags($input); $filtered = filter_sensitive_words($plain); echo htmlspecialchars($filtered, ENT_QUOTES, 'UTF-8');。漏掉 htmlspecialchars 就可能引发 XSS。
注意:strip_tags() 默认不过滤自闭合标签如 ,如需更严格,配合 html5lib 或 DOMDocument 做白名单解析,但代价高,一般场景没必要。
为什么 mb_substr 替换后乱码,而 substr 不出问题
因为中文是多字节字符,substr 按字节切,可能截断 UTF-8 编码中的某个汉字,导致后续 str_replace 匹配失败或输出乱码;mb_substr 按字符切,安全但默认编码是 ISO-8859-1,不是 UTF-8。必须显式传参:mb_substr($text, 0, 100, 'UTF-8')。
更稳妥的做法:统一用 mb_* 函数族,并在脚本开头设好编码:mb_internal_encoding('UTF-8');。否则 mb_stripos 查“政治”可能返回 false,即使它明明存在。
容易被忽略的一点:MySQL 连接也要设 UTF-8,否则从数据库读出的词本身就是乱码,过滤自然失效 —— 检查 mysqli_set_charset($conn, 'utf8mb4') 是否执行。
# mysql
# php
# word
# html
# js
# json
# html5
# 编码
# 字节
# 苹果
# 苹果手机
# ai
# swoole
# xss
# echo
# Static
# 字符串
# 循环
# input
# table
# 数据库
# 网站开发
# 多字
# 加载
# 再过
# 再对
# 首次
# 不出
# 也要
# 修饰符
# 并在
# 不支持
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
如何打造高效商业网站?建站目的决定转化率
如何在IIS中新建站点并配置端口与物理路径?
Laravel怎么实现验证码(Captcha)功能
北京网站制作的公司有哪些,北京白云观官方网站?
百度浏览器如何管理插件 百度浏览器插件管理方法
linux写shell需要注意的问题(必看)
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
高端云建站费用究竟需要多少预算?
Laravel中的withCount方法怎么高效统计关联模型数量
JavaScript Ajax实现异步通信
如何在服务器上配置二级域名建站?
如何用花生壳三步快速搭建专属网站?
微信小程序 canvas开发实例及注意事项
js代码实现下拉菜单【推荐】
JavaScript如何操作视频_媒体API怎么控制播放
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何有效防御Web建站篡改攻击?
Laravel怎么实现模型属性的自动加密
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
利用vue写todolist单页应用
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
韩国服务器如何优化跨境访问实现高效连接?
JavaScript模板引擎Template.js使用详解
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
SQL查询语句优化的实用方法总结
如何快速搭建高效简练网站?
Laravel如何使用模型观察者?(Observer代码示例)
如何在阿里云ECS服务器部署织梦CMS网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何在阿里云虚拟主机上快速搭建个人网站?
如何制作一个表白网站视频,关于勇敢表白的小标题?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Python面向对象测试方法_mock解析【教程】
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何确保FTP站点访问权限与数据传输安全?
如何在IIS中新建站点并解决端口绑定冲突?

