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


Posted in PHP onSeptember 22, 2014

本文实例讲述了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 要替?Q的字符串 
  * @return String     替?Q后的字符串 
  */ 
  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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
最令PHP初学者们头痛的十四个问题
Jan 15 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
PHP错误和异长常处理总结
Mar 06 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
php实现的发送带附件邮件类实例
Sep 22 #PHP
PHP实现AES256加密算法实例
Sep 22 #PHP
php生成QRcode实例
Sep 22 #PHP
php实现的Captcha验证码类实例
Sep 22 #PHP
php中unserialize返回false的解决方法
Sep 22 #PHP
php实现根据字符串生成对应数组的方法
Sep 22 #PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 #PHP
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
Javascript中暂停功能的实现代码
2007/03/04 Javascript
用cssText批量修改样式
2009/08/29 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
pytorch permute维度转换方法
2018/12/14 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
Python自动创建Excel并获取内容
2020/09/16 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
师范毕业生自我鉴定
2014/01/15 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
报效祖国演讲稿
2014/09/15 职场文书
人民调解协议书范本
2014/10/11 职场文书
暑期实践个人总结
2015/03/06 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang