The StrFilter.class.php class file is as follows:
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 |
/**string filter class * Date: 2013-01-09 * Author: fdipzone * Ver: v1.0 * * Func: * public replace Replace illegal characters * public check Check whether it contains illegal characters * private protect_white_list protection whitelist * private resume_white_list restore whitelist * private getval Convert whitelist key to 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; }
/** Replace illegal characters * @param String $content The string to be replaced * @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; }
/**Check for illegal self-characters * @param String $content string * @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; }
/**Protection whitelist * @param String $content string * @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; }
/**Restore whitelist * @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示例如下:
4 11 12 |
<🎜> 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); ?> http://www.bkjia.com/PHPjc/882702.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/882702.htmlTechArticlephp实现的替换敏感字符串类实例 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... |