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 cron中的批处理
Sep 16 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
JS 网站性能优化笔记
May 24 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
php使用google地图应用实例
Dec 31 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
php微信开发之关注事件
Jun 14 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
gearman中任务的优先级和返回状态实例分析
Feb 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
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php实现微信支付之现金红包
2018/05/30 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
bootstrap改变按钮加载状态
2014/12/01 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
python验证码识别实例代码
2018/02/03 Python
用Eclipse写python程序
2018/02/10 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
企业办公室主任岗位职责
2014/02/19 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
英文邀请函
2015/02/02 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
技术入股合作协议书
2016/03/21 职场文书
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
python turtle绘图
2022/05/04 Python