您的位置:首页 > 编程语言 > PHP开发

php 替换敏感字符串

2017-06-10 12:40 176 查看
StrFilter.class.php


[php]
view plain
copy

<?php  
/** string filter class 
* Date:     2013-01-09 
* Author:   fdipzone 
* Ver:      v1.0 

* 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 
e02b
'';  
        }  
  
        // 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  
  
?>  

demo

[php]
view plain
copy

<?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);  
?> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: