IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP敏感词汇过滤SDK(树形结构遍历命中违禁词) -> 正文阅读

[PHP知识库]PHP敏感词汇过滤SDK(树形结构遍历命中违禁词)

先介绍一下匹配敏感词原理吧,因为没有工具,画的很糙,有疑问直接联系我。(绿色箭头代表命中敏感词,灰色:未命中)

base 确定有穷自动机(DFA)算法

比如说“可以”是敏感词,那么遍历到“以”的时候直接终止遍历

比如说输入“可口”的时候,遍历到“口”的时候,这时候的文字状态是false,所以程序上认为“可口”并非是敏感词(在树上的每一个文字都有一个end状态,只有最后一个字的end=true,其他都是false

实现步骤

首先将 lustre/php-dfa-sensitive composer下来

composer 官网地址:lustre/php-dfa-sensitive - Packagist

直接上代码,用个单例模式吧

<?php
/**
 * @CreatedBy   fanbin
 *
 * @CreatedTime 2021/12/28 17:59
 *
 * @Describe    敏感词汇过滤
 */
namespace App\Admin;

use App\Notice;
use Illuminate\Support\Facades\Redis;
use DfaFilter\SensitiveHelper;

class SensitiveWords
{
    //当前类对象的属性
    private static $instance;

    /**
     * 防止实例化
     */
    private function __construct()
    {

    }

    /**
     * 防止克隆
     */
    private function __clone()
    {

    }

    /**
     * 获取实例
     */
    public static function getInstance()
    {
        if (!self::$instance instanceof self) {
            self::$instance = SensitiveHelper::init();

            $words = self::getSensitiveWords();
            self::$instance->setTree($words);
        }
        return self::$instance;
    }

    /**
     * 获取敏感词汇
     * 优先从redis获取
     *
     * @return array
     */
    public static function getSensitiveWords()
    {
        $words = Redis::get('sensitive_words');
        $words = json_decode($words, true);
        if (!$words) {
            $words = Notice::ins()->getSensitiveWords([]);
            $words = array_column($words, 'b_word');
            Redis::set('sensitive_words', json_encode($words));
        }
        return $words;
    }
}

调用:

$handle = SensitiveHelper::init()->setTree($wordData);
检测是否带有敏感词
$islegal = $handle->islegal($content);
敏感词过滤
// 敏感词替换为*为例(会替换为相同字符长度的*)
$filterContent = $handle->replace($content, '*', true);

 // 或敏感词替换为***为例
 $filterContent = $handle->replace($content, '***');
标记敏感词
 $markedContent = $handle->mark($content, '<mark>', '</mark>');
获取文字中的敏感词
// 获取内容中所有的敏感词
$sensitiveWordGroup = $handle->getBadWord($content);
// 仅且获取一个敏感词
$sensitiveWordGroup = $handle->getBadWord($content, 1);

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:39:24  更:2022-01-01 13:41:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 20:59:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计