php实现的替换敏感字符串类实例

原创 2017-02-18 13:31:11 477
摘要:本文实例讲述了php实现的替换敏感字符串类及其用法,在php程序开发中有着非常广泛的应用价值。分享给大家供大家参考。具体方法如下:StrFilter.class.php类文件如下:<?php /** string filter class * Date:   2013-01-09 * Author: &

本文实例讲述了php实现的替换敏感字符串类及其用法,在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);
?>

更多关于php实现的替换敏感字符串类实例请关注PHP中文网(www.php.cn)其他文章!

发布手记

热门词条