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

时间:2022-09-22 07:44:25

本文实例讲述了php实现的替换敏感字符串及其用法,在php程序开发中有着非常广泛的应用价值。分享给大家供大家参考。具体方法如下:

StrFilter.class.php类文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?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示例如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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程序设计的学习有所帮助。