php 替换敏感字符串的类(附源码)

发布时间:2020-03-12编辑:脚本学堂
分享一个php实现的用于替换敏感字符串的类,有白名单功能,挺不错的,并提供完整源码供下载,有需要的朋友参考下。

1,类文件 StrFilter.class.php
 

复制代码 代码示例:
<?php 
/** string filter class
* Date:     2013-01-09
* Author:   fdipzone
* Ver:      v1.0
* Edit: www.jb200.com
* Func:
* public  replace            替换非法字符
* public  check              检查是否含有非法字符
* private protect_white_list 保护白名单
* private resume_white_list  还原白名单
* private getval             白名单 key转为value
*/ 
class StrFilter{ // class start 
 
    private $_white_list = array(); 
    private $_black_list = array(); 
    private $_replacement = '*'; 
    private $_LTAG = '[[##'; 
    private $_RTAG = '##]]';
 
    /**
    * @param Array  $white_list
    * @param Array  $black_list
    * @param String $replacement
    */ 
    public function __construct($white_list=array(), $black_list=array(), $replacement='*'){ 
        $this->_white_list = $white_list; 
        $this->_black_list = $black_list; 
        $this->_replacement = $replacement; 
    } 
 
    /** 替换非法字符
    * @param  String $content 要替換的字符串
    * @return String          替換后的字符串
    */ 
    public function replace($content){ 
 
        if(!isset($content) || $content==''){ 
            return ''; 
        } 
 
        // protect white list 
        $content = $this->protect_white_list($content); 
 
        // replace black list 
        if($this->_black_list){ 
            foreach($this->_black_list as $val){ 
                $content = str_replace($val, $this->_replacement, $content); 
            } 
        } 
 
        // resume white list 
        $content = $this->resume_white_list($content); 
 
        return $content; 
    }
 
    /** 检查是否含有非法自符
    * @param  String $content 字符串
    * @return boolean
    */ 
    public function check($content){ 
 
        if(!isset($content) || $content==''){ 
            return true; 
        } 
 
        // protect white list 
        $content = $this->protect_white_list($content); 
 
        // check 
        if($this->_black_list){ 
            foreach($this->_black_list as $val){ 
                if(strstr($content, $val)!=''){ 
                    return false; 
                } 
            } 
        }
        return true; 
    }
 
    /** 保护白名单
    * @param  String $content 字符串
    * @return String
    */ 
    private function protect_white_list($content){ 
        if($this->_white_list){ 
            foreach($this->_white_list as $key=>$val){ 
                $content = str_replace($val, $this->_LTAG.$key.$this->_RTAG, $content); 
            } 
        } 
        return $content; 
    }
 
    /** 还原白名单
    * @param  String $content
    * @return String
    */ 
    private function resume_white_list($content){ 
        if($this->_white_list){ 
            $content = preg_replace_callback("/[[##(.*?)##]].*?/si", array($this, 'getval'), $content); 
        } 
        return $content; 
    }
    /** 白名单 key还原为value
    * @param  Array  $matches 匹配white_list的key
    * @return String white_list val
    */ 
    private function getval($matches){ 
        return isset($this->_white_list[$matches[1]])? $this->_white_list[$matches[1]] : ''; // key->val 
    } 
 
} // class end 
 
?> 

2,演示示例 demo.php
 

复制代码 代码示例:
<?php 
    header("content-type:text/html;charset=utf8"); 
 
    require("StrFilter.class.php"); 
 
    $white = array('屌丝', '曹操'); 
    $black = array('屌', '操'); 
 
    $content = "我操,曹操你是屌丝,我屌你啊"; 
 
    $obj = new StrFilter($white, $black); 
    echo $obj->replace($content); 
?>

附,php 替换敏感字符串的类源码下载地址