<?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. 打开iBatis显示运行sql语句

    将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试: log4j.logger.com.ibatis=DEBUG log4j.logger.com ...

  2. netcore发布失败

    2.2  发布Views  <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish> 导致 发布失败--------- ...

  3. was unable to refresh its cache! status = Cannot execute request on any known server

    出现这种错误是因为: Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为. 在 yml中设置 eureka.client.register-with-eu ...

  4. lambd

    匿名函数 1.匿名函数格式 void test01() { []() { cout << "hello world" << endl; }(); } 2使用 ...

  5. Python之路【第九篇】:Python面向对象

    阅读目录 一.三大编程范式 编程范式即编程的方法论,标识一种编程风格: 大家学习了基本的python语法后,大家可以写python代码了,然后每个人写代码的风格不同,这些不同的风格就代表了不同的流派: ...

  6. libevent源码分析二--timeout事件响应

    libevent不仅支持io事件,同时还支持timeout事件与signal事件,这篇文件将分析libevent是如何组织timeout事件以及如何响应timeout事件. 1.  min_heap ...

  7. DS 图解快排

    快速排序是交换排序,是冒泡排序的改进版. 快排过程: 1.选定一个分界值     2.分成三个部分(小于分界部分,分界值,大于分界值部分)                       3.对于分开的两 ...

  8. python 2种创建多线程的方法

    多个线程是可以操作同一个全局变量的,因此,可以通过这种方式来判断所有线程的执行进度 # 第一种方法:将要执行的方法作为参数传给Thread的构造方法 import threading import t ...

  9. 属性动画 补间动画 帧动画 基本使用案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  10. 阿里巴巴 Java 开发手册 (五) 集合处理

    1. [强制]关于 hashCode 和 equals 的处理,遵循如下规则: 1) 只要重写 equals,就必须重写 hashCode. 2) 因为 Set 存储的是不重复的对象,依据 hashC ...