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中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 PHP
php实现文件下载实例分享
Jun 02 PHP
php中使用url传递数组的方法
Feb 11 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
php自动载入类用法实例分析
Jun 24 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 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
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
C# Assembly类访问程序集信息
2009/06/13 PHP
PHP学习之正则表达式
2011/04/17 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP 读取和编写 XML
2014/11/19 PHP
php中session定期自动清理的方法
2015/11/12 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
jquery.validate使用详解
2016/06/02 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
详解python中的装饰器
2018/07/10 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
tensorflow 实现数据类型转换
2020/02/17 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
岗位职责说明书
2014/05/07 职场文书
锦旗标语大全
2014/06/23 职场文书
施工安全责任书范本
2014/07/24 职场文书
给老婆的道歉信
2015/01/20 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
创业计划书之旅游网站
2019/09/06 职场文书