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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
PHP中比较时间大小实例
Aug 21 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
PHP中显示格式化的用户输入
2006/10/09 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
Python标准库之sqlite3使用实例
2014/11/25 Python
python爬取51job中hr的邮箱
2016/05/14 Python
Python的语言类型(详解)
2017/06/24 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
利用python开发app实战的方法
2019/07/09 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
事业单位考核材料
2014/05/21 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
JS的深浅复制详细
2021/10/16 Javascript
Python实现简单得递归下降Parser
2022/05/02 Python