网站首页 站长福利 福利文章 正文
网站内容有过多的敏感词,会导致K站。一方面是你懂的,另一方面是我们自己可能也要过滤一些人身攻击或者广告信息等,具体词库可以google下,有很多。
过滤敏感词,使用简单的循环str_replace是性能很低效的,还会随着词库的增加,性能指数下降,而且简单的替换,不能解决一些不是完全匹配的词。这时候就需要先构建一个字典树(trie),单纯的字典树占用空间较大,使用Double-Array Trie或者Ternary Search Tree可以在保证性能的同时节省一部分空间,但是敏感词基本不会很多,几千甚至上万个词基本没压力,所以就实现就选择先构建一个字典树,然后逐字做匹配。
代码不多,就贴到这里。
函数部分
<?php class SensitiveWordFilter { private $dict; private $dictPath; public function __construct($dictPath) { $this->dict = array(); $this->dictPath = $dictPath; $this->initDict(); } private function initDict() { $handle = fopen($this->dictPath, 'r'); if (!$handle) { throw new RuntimeException('open dictionary file error.'); } while (!feof($handle)) { $word = trim(fgets($handle, 128)); if (empty($word)) { continue; } $uWord = $this->unicodeSplit($word); $pdict = &$this->dict; $count = count($uWord); for ($i = 0; $i < $count; $i++) { if (!isset($pdict[$uWord[$i]])) { $pdict[$uWord[$i]] = array(); } $pdict = &$pdict[$uWord[$i]]; } $pdict['end'] = true; } fclose($handle); } public function filter($str, $maxDistance = 5) { if ($maxDistance < 1) { $maxDistance = 1; } $uStr = $this->unicodeSplit($str); $count = count($uStr); for ($i = 0; $i < $count; $i++) { if (isset($this->dict[$uStr[$i]])) { $pdict = &$this->dict[$uStr[$i]]; $matchIndexes = array(); for ($j = $i + 1, $d = 0; $d < $maxDistance && $j < $count; $j++, $d++) { if (isset($pdict[$uStr[$j]])) { $matchIndexes[] = $j; $pdict = &$pdict[$uStr[$j]]; $d = -1; } } if (isset($pdict['end'])) { $uStr[$i] = '*'; foreach ($matchIndexes as $k) { if ($k - $i == 1) { $i = $k; } $uStr[$k] = '*'; } } } } return implode($uStr); } public function unicodeSplit($str) { $str = strtolower($str); $ret = array(); $len = strlen($str); for ($i = 0; $i < $len; $i++) { $c = ord($str[$i]); if ($c & 0x80) { if (($c & 0xf8) == 0xf0 && $len - $i >= 4) { if ((ord($str[$i + 1]) & 0xc0) == 0x80 && (ord($str[$i + 2]) & 0xc0) == 0x80 && (ord($str[$i + 3]) & 0xc0) == 0x80) { $uc = substr($str, $i, 4); $ret[] = $uc; $i += 3; } } else if (($c & 0xf0) == 0xe0 && $len - $i >= 3) { if ((ord($str[$i + 1]) & 0xc0) == 0x80 && (ord($str[$i + 2]) & 0xc0) == 0x80) { $uc = substr($str, $i, 3); $ret[] = $uc; $i += 2; } } else if (($c & 0xe0) == 0xc0 && $len - $i >= 2) { if ((ord($str[$i + 1]) & 0xc0) == 0x80) { $uc = substr($str, $i, 2); $ret[] = $uc; $i += 1; } } } else { $ret[] = $str[$i]; } } return $ret; } }
使用方法
<?php require 'SensitiveWordFilter.php'; /* 初始化传入词库文件路径,词库文件每个词一个换行符。 如: 敏感1 敏感2 目前只支持UTF-8编码 */ $filter = new SensitiveWordFilter(__DIR__ . '/data/minganwords.txt'); /* 第一个参数传入要过滤的字符串,第二个是匹配的字间距, 比如'枪支'是一个敏感词,想过滤'枪||||支'的时候, 就需要指定一个两个字的间距,可以根据情况设定, 超过指定间距就不会过滤。所有匹配的敏感词会被替换为'*'。 */ $groupname = "这是一个敏感词"; $check = $filter->filter($groupname,2); echo($check);
目录导航
函数部分
使用方法
- 上一篇: 正则表达式语法大全
- 下一篇: 根据IP段阻止访客查看源码的PHP代码
必看说明
- 本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。
- 本站文章或仅为文本内容原创,非程序原创。如有侵权、不妥之处,请联系站长第一时间删除。敬请谅解!
- 本站所有内容严格遵守国家法律的条例,所有研究的算法技术均来源于搜索引擎公开默认允许用户研究使用的接口。
- 阅读本文及获取资源前,请确保您已充分阅读并理解《访问曹操SEO网站需知:行为准则》。
- 本站分享的任何工具、程序仅供学习参考编写架构,仅可在本地的虚拟机内断网测试,严禁联网运行或上传搭建!
- 任何资源必须在下载后24个小时内,从电脑中彻底删除。不得传播或者用于其他任何用途!否则一切后果用户自负!
- 转载请注明 : 文章转载自 曹操SEO 用php实现一个敏感词过滤功能
- 本文标题:《用php实现一个敏感词过滤功能》
- 本文链接:https://www.ccooc.cn/1903.html
猜你喜欢
- 2023-05-07 鱼刺自动化发布推广软件
- 2023-05-07 卓越关键词自动拓展采集工具
- 2023-04-02 使用PHP采集的网站网站的标题及内容
- 2023-03-31 使用PHP代码进行多页面推送的方法
- 2023-03-26 正则表达式语法大全
- 2023-02-14 已上线之站长后台二级域名添加工具(失效)
- 2023-02-08 判断并记录蜘蛛日志,且非蜘蛛跳转的PHP代码
- 2023-02-08 判断访客来源且分设备延时跳转的js代码
- 2023-01-19 正东批量提交泛二级工具
- 2022-09-27 使用notepad++正则快速替换代码
你 发表评论:
欢迎- 7208℃遵纪守法:一起举报违法网址
- 6060℃警惕“冒用身份”的电信网络诈骗
- 6376℃备案域名的买卖管控会越来越严,不要尝试!
- 4390℃6月1日是《中华人民共和国网络安全法》实施五周年
- 3898℃违规事件分类与违规信息类型说明
- 3707℃关于严格遵守网络安全法规的公告
- 5672℃百度正打击构造虚假标题等违规站点
- 6964℃「百日行动」“断卡”行动持续发力
- 13625℃懒人开源站群程序V2.4.2:影视模板V2
- 13128℃通过Nginx配置增强网站安全性
- 12599℃多线程批量查询百家号文章存活情况
- 11893℃搜狐号安全系统升级通知
- 10514℃百家号批量发布软件V1.8.5
- 10190℃多线程批量查询链接收录情况(免代理)
- 9148℃企业网站安全漏洞应对:从修复到增强全方位安全新举措
- 6555℃CCSEO原创蜘蛛统计v1.3
- 08-18罪恶克星:不良网站举报工具填表版
- 05-01多线程批量查询百家号文章存活情况
- 04-22通过Nginx配置增强网站安全性
- 04-22企业网站安全漏洞应对:从修复到增强全方位安全新举措
- 04-21搜狐号安全系统升级通知
- 04-18多线程批量查询链接收录情况(免代理)
- 04-09懒人开源站群程序V2.4.2:影视模板V2
- 04-03百家号批量发布软件V1.8.5
- 近期评论
- 文章归档
-
- 2024年8月 (1)
- 2024年5月 (1)
- 2024年4月 (10)
- 2024年3月 (6)
- 2024年1月 (2)
- 2023年12月 (4)
- 2023年11月 (2)
- 2023年10月 (7)
- 2023年9月 (24)
- 2023年8月 (6)
- 2023年7月 (20)
- 2023年6月 (13)
- 2023年5月 (26)
- 2023年4月 (48)
- 2023年3月 (21)
- 2023年2月 (15)
- 2023年1月 (10)
- 2022年12月 (10)
- 2022年11月 (3)
- 2022年10月 (28)
- 2022年9月 (37)
- 2022年8月 (16)
- 2022年7月 (23)
- 2022年6月 (24)
- 2022年5月 (10)
- 2022年4月 (53)
- 2022年3月 (67)
- 2022年2月 (3)
- 2022年1月 (4)
- 2021年12月 (24)
- 2021年11月 (18)
- 2021年10月 (3)
- 2021年9月 (22)
- 2021年8月 (60)
- 2021年7月 (3)
- 2021年6月 (16)
- 2021年5月 (25)
- 2021年4月 (1)
- 2021年3月 (39)
- 2021年1月 (7)
- 2020年12月 (19)
- 2020年11月 (11)
- 2020年10月 (49)
- 2020年9月 (114)
- 2020年8月 (63)
- 2020年7月 (28)
- 2020年6月 (50)
- 2020年5月 (124)
- 2020年4月 (83)
- 2020年3月 (91)
- 2020年2月 (81)
- 2020年1月 (18)
- 2019年12月 (79)
- 2019年11月 (16)
- 2019年10月 (35)
- 2019年9月 (3)
- 2017年12月 (1)
- 2017年11月 (203)
- 2017年10月 (155)
- 标签列表
- 站点信息
-
- 文章总数:2024
- 页面总数:7
- 分类总数:46
- 标签总数:340
- 评论总数:9280
- 浏览总数:5746312
已有2位网友发表了看法: