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同时支持GIF、png、JPEG
Oct 09 PHP
动易数据转成dedecms的php程序
Apr 07 PHP
php 特殊字符处理函数
Sep 05 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 PHP
PHP 中检查或过滤IP地址的实现代码
Nov 27 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 PHP
PHP保留两位小数的几种方法
Jul 24 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(3) php 函数
2010/02/15 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
可实现多表单提交的javascript函数
2007/08/01 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Python构造函数及解构函数介绍
2015/02/26 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python用户管理系统
2018/03/13 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
python的re模块使用方法详解
2019/07/26 Python
python无序链表删除重复项的方法
2020/01/17 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
销售简历自我评价
2014/01/24 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
承诺书格式
2014/06/03 职场文书
担保书范文
2015/01/20 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python