<?php
/**
 * 敏感词过滤工具类
 * 使用方法
 * echo FilterTools::filterContent("你妈的我操一色狼杂种二山食物","*",DIR."config/word.txt",$GLOBALS["p_memcache"]["bad_words"]);
 */
 
class FilterTools {
    public static $keyword = array();
    /**
     * 从文件中加载敏感词
     * @param $filename
     * @return array
     */
    static function getBadWords($filename){
        $file_handle = fopen($filename, "r");
        while (!feof($file_handle)) {
            $line = trim(fgets($file_handle));
            array_push(self::$keyword,$line);
        }
        fclose($file_handle);
        return self::$keyword;
    }
 
    /**
     * @param $content 待处理字符串
     * @param $target  替换后的字符
     * @param $filename  敏感词配置文件
     * @param $memconfig 缓存配置文件
     * @return 处理后的字符串
     */
    static function filterContent($content,$target,$filename,$memconfig){
        $mem = new BadWordsMemcache($filename,$memconfig);
        $keyword = $mem->getList();
        if(count($keyword) == 0){
            $keyword = self::getBadWords($filename);
        }
        return strtr($content, array_combine( $keyword, array_fill(0,count($keyword), $target)));
    }
 
}
 
/**
 * 敏感词缓存处理类
 * Class BadWordsMemcache
 */
class BadWordsMemcache{
    var $memcache;
    var $key;
    var $list;
    var $filename;
    function __construct($filename,$memconfig) {
        $this->filename = $filename;
        if(!class_exists("P_Memcache")){
            require_once DIR."lib/memcache.class.php";
        }
        $this->key = "bad_words";
        $this->memcache = new P_Memcache();
        $this->memcache->config = $memconfig;
        $this->memcache->connect();
        print_r($this->memcache);
        $this->init();
    }
    function __destruct() {
        $this->memcache->close();
    }
 
    /**
     * 初始化
     * @param bool $isReset
     */
    function init($isReset = false){
        $this->list = $this->memcache->get($this->key)?$this->memcache->get($this->key):array();
        if(count($this->list)==0 || $isReset){
            $this->list = filterTools::getBadWords($this->filename);
            $this->memcache->set($this->key, $this->list);
            $log_data = Log::formatData($this->list);
            Log::logWrite($log_data, 'bad.words','init');
        }
    }
 
    /**
     * 获取列表
     * @return mixed
     */
    function getList(){
        return $this->list;
    }
}

php过滤敏感词的更多相关文章

  1. web前端js过滤敏感词

    web前端js过滤敏感词 这里是用文本输入框还有文本域绑定了失去焦点事件,然后再遍历敏感词数组进行匹配和替换. var keywords=["阿扁","呵呵", ...

  2. (转)两种高效过滤敏感词算法--DFA算法和AC自动机算法

    原文:https://blog.csdn.net/u013421629/article/details/83178970 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十 ...

  3. 【SpringBoot】前缀树 Trie 过滤敏感词

    1.过滤敏感词 Spring Boot实践,开发社区核心功能 完成过滤敏感词 Trie 名称:Trie也叫做字典树.前缀树(Prefix Tree).单词查找树 特点:查找效率高,消耗内存大 应用:字 ...

  4. SpringBoot开发十四-过滤敏感词

    项目需求-过滤敏感词 利用 Tire 树实现过滤敏感词 定义前缀树,根据敏感词初始化前缀树,编写过滤敏感词的方法 代码实现 我们首先把敏感词存到一个文件 sensitive.txt: 赌博 嫖娼 吸毒 ...

  5. 过滤敏感词工具类SensitiveFilter

    网上过滤敏感词工具类有的存在挺多bug,这是我自己改用的过滤敏感词工具类,目前来说没啥bug,如果有bug欢迎在评论指出 使用前缀树 Trie 实现的过滤敏感词,树节点用静态内部类表示了,都写在一个 ...

  6. [转]Filter实现处理中文乱码,转义html标签,过滤敏感词

    原文地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可 ...

  7. js 过滤敏感词 ,可将带有标点符号的敏感词过滤掉

    function transSensitive(content) { // var Sensitive = H.getStorage("Sensitive");//敏感词数组 va ...

  8. PHP 扩展 trie-tree, swoole过滤敏感词方案

    在一些app,web中评论以及一些文章会看到一些*等,除了特定的不显示外,我们会把用户输入的一些敏感字符做处理,具体显示为*还是其他字符按照业务区实现. 下面简单介绍下业务处理. 原文地址:小时刻个人 ...

  9. js 过滤敏感词

    <html> <head>     <title>Bad Words Example</title>     <script type=" ...

随机推荐

  1. asp.net core使用水晶报表问题

    背景     最近项目上遇到一个需求,要后台通过定时任务把水晶报表生成pdf文件,然后邮件发送给相关人. 技术实现思路     选用ASP.NET Core框架(基于2.2版本),通过IHostedS ...

  2. SQL Server 特殊字符及中文汉字的处理

    简介 在SQL Server 中很多时候需要对一些字段中特殊的字符做处理,比如某个字段中包含一些回车.制表.换行等特殊字符(这些字符往往来源于Excel).这些特殊字符的存在可能导致无法提取到所需数据 ...

  3. 【PYQT5快速开发】重定义边框、QSS美化皮肤主题

    在用qt designer的基础上重定义边框 前言 作为一名技术工作者,偶有使用.开发工具的需求.制作工具时,既不想在界面上花太懂功夫,又想要工具模样与众不同,结果找半天找不到一键换装的功能/拍砖. ...

  4. redis源码分析(三)--rdb持久化

    Redis rdb持久化 Redis支持两种持久化方式:rdb与aof.rdb将一个节点上的内存数据序列化后存储到磁盘中,序列化的数据以尽可能节约空间的方式存储,并非完全的ascii表示.它的优点在于 ...

  5. vs2017- C语言- winsocket- 链接错误 LNK2019

    错误介绍 操作系统:windows10 IDE:vs2017 语言:C语言 项目内容简介:编写一个双人网络海战棋对战游戏 错误类型:链接错误 LNK2019 解决方案:程序需要用到ws2_32.lib ...

  6. ubuntu Django + Uwsgi + Nginx 的生产环境部署

    一.概述 使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇 ...

  7. 【题解】Luogu P5290 [十二省联考2019]春节十二响

    原题传送门 每个点维护一个堆,表示这个点及其子树所需的每段内存的空间 搜索时从下向上做启发式合并堆中信息,最后根节点堆中所有内存空间之和就是答案 #include <bits/stdc++.h& ...

  8. C# vb .net实现像素化效果滤镜打马赛克

    在.net中,如何简单快捷地实现Photoshop滤镜组中的像素化效果打马赛克呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授 ...

  9. jquery.pagination.js分页demo

    公用jquery.pagination.js /** * This jQuery plugin displays pagination links inside the selected elemen ...

  10. Java调用Http/Https接口(5)--HttpAsyncClient调用Http/Https接口

    HttpAsyncClient是HttpClient的异步版本,提供异步调用的api.文中所使用到的软件版本:Java 1.8.0_191.HttpClient 4.1.4. 1.服务端 参见Java ...