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 相关文章推荐
PHP+DBM的同学录程序(2)
Oct 09 PHP
dedecms系统常用术语汇总
Apr 03 PHP
php实现简单洗牌算法
Jun 18 PHP
php连接函数implode与分割explode的深入解析
Jun 26 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
yii2安装详细流程
May 23 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 PHP
PHP中的异常处理机制深入讲解
Nov 10 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
Content-type 的说明
2006/10/09 PHP
让PHP支持页面回退的两种方法
2008/01/10 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
详解Python当中的字符串和编码
2015/04/25 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
大学优秀班主任事迹材料
2014/05/02 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
产品调价通知函
2015/04/20 职场文书
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL