zoukankan      html  css  js  c++  java
  • php 替换敏感字符串

    StrFilter.class.php
    <?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 '';
            }
    
            // 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
    	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);
    ?>
    源码下载地址:点击下载
  • 相关阅读:
    【每日更新】【Redis学习】
    【转】RabbitMQ基础——和——持久化机制
    【转】重写Equals为什么要同时重写GetHashCode
    .net WebApi中使用swagger生成WepApi集成测试工具
    【深度好文】多线程之WaitHandle-->派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent
    C#编码问题以及C#往Mysql插数据编码问题
    HTTP methods 与 RESTful API
    Facebook币Libra学习-6.发行属于自己的代币Token案例(含源码)
    Facebook币Libra学习-5.Move组织目录
    Facebook币Libra学习-4.新的智能合约语言Move入门
  • 原文地址:https://www.cnblogs.com/fdipzone/p/3715142.html
Copyright © 2011-2022 走看看