网站首页 站长福利 福利文章 正文
网站内容有过多的敏感词,会导致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个小时内,从电脑中彻底删除。不得传播或者用于其他任何用途!否则一切后果用户自负!
- 转载请注明 : 文章转载自 曹操资源网 用php实现一个敏感词过滤功能
- 本文标题:《用php实现一个敏感词过滤功能》
- 本文链接:http://www.ccooc.cc/1262.html
猜你喜欢
- 2023-05-07 鱼刺自动化发布推广软件
- 2023-05-07 卓越关键词自动拓展采集工具
- 2023-04-02 使用PHP采集的网站网站的标题及内容
- 2023-03-31 使用PHP代码进行多页面推送的方法
- 2023-03-26 正则表达式语法大全
- 2023-02-08 判断并记录蜘蛛日志,且非蜘蛛跳转的PHP代码
- 2023-02-08 判断访客来源且分设备延时跳转的js代码
- 2023-01-19 正东批量提交泛二级工具
- 2022-09-27 使用notepad++正则快速替换代码
- 2022-09-22 给生成的网站地图带上时间戳的php代码
你 发表评论:
欢迎- 05-26警惕“冒用身份”的电信网络诈骗
- 05-11PHP使用纯真IP数据库输出ip位置
- 05-11ChatGPT的高效应用:指令大全
- 05-10堤防“瑞熙工作室”利用QQ及微信诈骗
- 05-10手机狐狸网资讯站群程序
- 05-10使用php在拼音转文字时过滤掉标点符号及英文字符
- 05-10买卖备案域名的法律规定
- 05-10泛目录站群的操作方法及注意事项
- 152℃ChatGPT的高效应用:指令大全
- 140℃手机狐狸网资讯站群程序
- 137℃移动引蜘蛛之CCMobile20230313版本
- 133℃买卖备案域名的法律规定
- 125℃堤防“瑞熙工作室”利用QQ及微信诈骗
- 122℃PHP使用纯真IP数据库输出ip位置
- 115℃应用汇资源分享站群程序
- 113℃泛目录站群的操作方法及注意事项
- 113℃警惕“冒用身份”的电信网络诈骗
- 110℃「百日行动」“断卡”行动持续发力
- 83℃遵纪守法:一起举报违法网址
- 311℃提防以免费做蜘蛛池为幌子卖域名的套路
- 453℃群内一切的私下交易行为,与我站无关!
- 125℃堤防“瑞熙工作室”利用QQ及微信诈骗
- 374℃提防“凤凰于飞”诈骗,加强网络安全认知!
- 467℃关于近期网站内容修改短期闭站的情况通知
- 文章归档
-
- 2023年5月 (17)
- 2023年4月 (45)
- 2023年3月 (23)
- 2023年2月 (9)
- 2023年1月 (11)
- 2022年12月 (9)
- 2022年11月 (4)
- 2022年10月 (33)
- 2022年9月 (41)
- 2022年8月 (19)
- 2022年7月 (19)
- 2022年6月 (20)
- 2022年5月 (9)
- 2022年4月 (42)
- 2022年3月 (65)
- 2022年2月 (1)
- 2022年1月 (4)
- 2021年12月 (23)
- 2021年11月 (2)
- 2021年10月 (4)
- 2021年9月 (22)
- 2021年8月 (70)
- 2021年7月 (1)
- 2021年6月 (21)
- 2021年5月 (28)
- 2021年4月 (1)
- 2021年3月 (42)
- 2021年1月 (8)
- 2020年12月 (34)
- 2020年11月 (15)
- 2020年10月 (39)
- 2020年9月 (107)
- 2020年8月 (37)
- 2020年7月 (22)
- 2020年6月 (46)
- 2020年5月 (120)
- 2020年4月 (76)
- 2020年3月 (81)
- 2020年2月 (69)
- 2020年1月 (14)
- 2019年12月 (38)
- 2019年11月 (11)
- 2019年10月 (25)
- 2019年9月 (2)
- 2017年10月 (1)
- 标签列表
- 站点信息
-
- 文章总数:1332
- 页面总数:1
- 分类总数:47
- 标签总数:337
- 评论总数:39
- 浏览总数:245225
本文暂时没有评论,来添加一个吧(●'◡'●)