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中的正规表达式(二)
Oct 09 PHP
PHP simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
简单的移动设备检测PHP脚本代码
Feb 19 PHP
基于PHP对XML的操作详解
Jun 07 PHP
php递归删除指定文件夹的方法小结
Apr 20 PHP
怎样搭建PHP开发环境
Jul 28 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
thinkphp分页实现效果
Oct 13 PHP
php可变长参数处理函数详解
Feb 22 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
为何说PHP引用是个坑,要慎用
Apr 02 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命令行脚本单进程运行的方法
2014/04/15 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
js实现聊天对话框
2020/02/08 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
js实现查询商品案例
2020/07/22 Javascript
python的id()函数解密过程
2012/12/25 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
Python循环语句之break与continue的用法
2015/10/14 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
python实现机器人行走效果
2018/01/29 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python实现电子词典
2020/03/03 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python气泡提示与标签的实现
2020/04/01 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
优秀的计算机专业求职信范文
2013/12/27 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
南湾猴岛导游词
2015/02/09 职场文书
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫