替换非法字符,检查非法字符(白名单,黑名单)

<?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);
            }
        }
        return $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
header("content-type:text/html;charset=utf8");
$white = array('屌丝', '曹操','');
$black = array('屌', '操');

$content = "我操,曹操你是屌丝,我屌你啊,毛你好";

$obj = new StrFilter($white, $black);
echo $obj->check($content);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值