在开发过程中,很多地方需要屏蔽掉一些敏感的词汇,或者将敏感词汇替换成其他字符,下面就是一个封装好的屏蔽敏感词汇的类

namespace app\models;

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'])) {

return 'mingan';

//这里是检测出有敏感词汇直接返回,下方注释是把敏感词汇替换成“萌字”

// $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;

}

}

调用

$filter = new SensitiveWordFilter(__DIR__.'/mg.txt');

$check = $filter->filter($groupname,2);

php敏感代码屏蔽,PHP敏感词汇屏蔽或替换相关推荐

  1. 鸿蒙os 2.0玩吃鸡,华为鸿蒙OS2.0[敏感词汇屏蔽]能简测:极致画质下的吃鸡王者更胜EMUI11...

    炫舞雷公电母IT之家5月1日消息华为本周已经向部分拥有测试资格的用户推送了H..armonyOS2.0开发者公测版更新,虽然部分功能体验与基于安卓10的EMUI11没有太大差别,但似乎已经给我们带来了 ...

  2. 网上发不出去的那些敏感词,是如何被屏蔽掉的?

    目录 一.用户评论功能 二.敏感词汇获取 三.过滤代码编写 最后 今天是刘小爱自学Java的第94天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 一.用户评论功能 网络上很多平台都会有敏感词 ...

  3. 敏感词过滤的php代码,php实现敏感词过滤(Trie树)

    灵感来自于 [嘉兴ing](https://segmentfault.com/a/1190000019137933 "Trie树 php 实现敏感词过滤") 感谢分享. 本文主要是 ...

  4. python敏感词过滤代码简单代码_Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去 ...

  5. [免费专栏] Android安全之检测APK中调试代码是否暴露敏感信息

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  6. python爬取整个网站的广告敏感词_Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去 ...

  7. 屏蔽电感和非屏蔽电感的区别?

    这个答案好像是谜底就在谜面上. 下面两篇文章说的太绕口,好听点是专业. 重点:屏蔽电感产生的不稳定射频信号,隔离. 缺点:贵. 1. 电感是衡量线圈产生电磁感应能力的物理量.给一个线圈通入电流,线圈周 ...

  8. 百度广告屏蔽及游戏推广屏蔽

    百度广告屏蔽及游戏推广屏蔽 首先打开一个英雄联盟贴吧网址http://tieba.baidu.com/f?kw=%D3%A2%D0%DB%C1%AA%C3%CB&fr=ala0 可以看到里面好 ...

  9. android敏感api函数,基于敏感API调用的Android应用程序动态监控

    摘要: 近年来,Android操作系统凭借其开源的优势,占领了移动操作系统市场.Android通过对外提供API接口重组资源,吸引了大量第三方开发人员创造出功能丰富的Android应用.但是,由于An ...

  10. html5屏蔽技术,实用javaScript屏蔽技术

    屏蔽键盘所有键, 屏蔽鼠标右键, 屏蔽 Ctrl+N.Shift+F10.F5刷新.退格键, 屏蔽浏览器右上角"最小化""最大化""关闭"键 ...

最新文章

  1. php跟html增删改查,EasyUIDataGrid结合ThinkPHP实现增删改查操作初学者_html/css_WEB-ITnose...
  2. flask处理cookie
  3. React state和props使用场景
  4. 读书笔记—《销售铁军》随记7
  5. python+selenium h5QQ空间自动点赞器
  6. SpringMVC3 AnnotationMethodHandlerAdapter与mvc:annotation-driven冲突的解决方案
  7. L1-029 是不是太胖了 (5 分)—团体程序设计天梯赛
  8. Java发送https请求,综合post请求,get请求,获取网络返回的信息
  9. html盒子颜色代码,css盒子(示例代码)
  10. Invest模型问题答疑--产水模块、土壤保持模块、供需平衡分析、生态系统服务、生物多样性生境质量
  11. QT之信号和槽机制详解
  12. 在线点餐外卖系统 毕业设计毕业论文参考(1)功能
  13. Ubuntu软件中心的完全启用
  14. python可视化47|最常用5个排序(Ranking)关系图
  15. 【Matlab】曲线拟合
  16. D - The Lucky Week ZOJ - 3939 (思维)
  17. java md5 源码_MD5加密 Java源代码
  18. linux startx xinit
  19. 淘宝商品详情,1688商品详情滑块的解决方法和接口
  20. Science复活远古“蛋白质”,揭示光合作用的“昨天、今天和明天”

热门文章

  1. 软件中断SWI的实现
  2. 微服务数据库分库设计解决方案(跨库关联查询、分布式事务处理)
  3. 一个例子学会自相关互相关的计算
  4. 关于Linux性能调优中系统CPU监测信息统计的一些笔记
  5. BoundsChecker教程
  6. solidword入门使用
  7. 最优化算法(1):数学基础
  8. 【Unity】用2D流体实现在水中添加染料的效果
  9. 【Android】全网最详细的Android入门基础教程,零基础速领
  10. 短信炸弹jmeter验证方法