php实现的替换敏感字符串类实例

本文实例讲述了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 要替換的字符串
  * @return String     替換后的字符串
  */
  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程序设计的学习有所帮助。

(0)

相关推荐

  • php字符串替换函数substr_replace()用法实例

    本文实例讲述了php字符串替换函数substr_replace()用法.分享给大家供大家参考.具体分析如下: substr_replace用于在指定字符串中替换指定位置的子字符串 <?php $string = "Warning: System will shutdown in NN minutes!"; $pos = strpos($string, "NN"); print(substr_replace($string, "15", $p

  • php字符串过滤与替换小结

    本文实例总结了php字符串过滤与替换的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php class cls_string_filter{  //将\n转化为<br/>--囧,这有意思么?  static public function nl2br($string){   return nl2br($string);  }  //将<br/>转化为\n  static public function br2nl($string){   $arra

  • PHP中strtr字符串替换用法详解

    本文实例讲述了PHP中strtr字符串替换用法.分享给大家供大家参考.具体分析如下: strtr(string,from,to)或者strtr(string,array) 首先针对strtr函数第一种方式,我们看看下面的举例,代码如下: 复制代码 代码如下: <?php echo strtr("I Love you","Lo","lO"); ?> 得到的结果是: 1 I lOve yOu 这个结果提醒我们,1.strtr它是区分大小写

  • php中替换字符串中的空格为逗号','的方法

    今天在网查到一篇介绍php中替换字符串中的空格为逗号','的文章,作个日记保存下来. 复制代码 代码如下: <pre name="code" class="php"><? php /* * 关键词中的空格替换为',' */ public function emptyreplace($str) { $str = str_replace(' ', ' ', $str); //替换全角空格为半角 $str = str_replace(' ', ' ',

  • PHP序列号生成函数和字符串替换函数代码

    复制代码 代码如下: /** * 序列号生成器 */ function snMaker($pre = '') { $date = date('Ymd'); $rand = rand(1000000,9999999); $time = mb_substr(time(), 5, 5, 'utf-8'); $serialNumber = $pre.$date.$time.$rand; // echo strlen($serialNumber).'<br />'; return $serialNumb

  • PHP 字符串正则替换函数preg_replace使用说明

    1. preg_replace() $msg = preg_replace("/<style>.+<\/style>/is", "", $msg); -----删除<style></style>和中间的部分 $msg = preg_replace("/<[^>]+>/", "", $msg); -----是删除<>和中间的内容 i (PCRE_CAS

  • php 字符串替换的方法

    这几天,工作中遇到一个小问题,有一内容类型的字段存储的是语言,因为这写数据是用Excel导入做的,所以为了处理简单,很多的语言就用逗号分隔,把所有语言做一个字符串,这样存入的时候就简单的多.但是由于当初数据质量的问题,有一部分"Chinese"是 "Mandarin Chinese",现在需要把所有的"Mandarin Chinese"改为"Chinese". 这就需要把一个字符串中的部分字符串替换掉.对于这样的问题,一般就是

  • php替换字符串中间字符为省略号的方法

    本文实例讲述了php替换字符串中间字符为省略号的方法.分享给大家供大家参考.具体分析如下: 对于一个长字符串,如果你只希望用户看到头尾的部分内容,隐藏掉中间内容,你可以使用这个php函数,他可以指定要隐藏掉的中间字符串的数量 /** * Reduce a string by the middle, keeps whole words together * * @param string $string * @param int $max (default 50) * @param string

  • php实现的替换敏感字符串类实例

    本文实例讲述了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_

  • C++ 中String 替换指定字符串的实例详解

    C++ 中String 替换指定字符串的实例详解 C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所有字符串,将"12212"这个字符串的所有"12"都替换成"21",结果是什么? 可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现, 代码如

  • C#自定义的字符串操作增强类实例

    本文实例讲述了C#自定义的字符串操作增强类.分享给大家供大家参考.具体如下: 这个C#类在C#自由的字符串操作类的基础上进行的大幅度增强,把我们平时可能用到的字符串操作都做进去了,字符串的处理我想大部分编程都不可避免,有了这个类,可以节省你很多时间,同时可以根据自己的需要对这个C#字符串类进行扩展. using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpress

  • 详解C++ string字符串类

    C++字符串string类 在C语言里,字符串是用字符数组来表示的,而对于应用层而言,会经常用到字符串,而继续使用字符数组,就使得效率非常低. 所以在C++标准库里,通过类string从新自定义了字符串. 头文件: #include <string> string直接支持字符串连接 string直接支持字符串的大小比较 string直接支持子串查找和提取 string直接支持字符串的插入和替换 string同时具备字符串数组的灵活性,可以通过[ ]重载操作符来访问每个字符. 字符串数组和str

  • Log4j日志分类和过滤敏感字段的实例

    项目上线时,需要对项目做安全检查,其中有两项是对输出日志进行分类和过滤掉日志中敏感字段. 项目使用Log4j日志系统,下面简单介绍下这两项要求的实现方式. 对日志进行分类,要求调用其他服务的API日志按照格式单独输出到一个文件. 方式: 除根Logger外,再额外增加一个apiLogger,如下, <!-- api logger的设置--> <logger name="log4j.logger.apiLogger" additivity="false&quo

  • IOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解 在实际的开发需求时,有时候我们需要对某些对象进行打包,最后拼接到参数中 例如,我们把所有的参数字典打包为一个 字符串拼接到参数中 思路:利用系统系统JSON序列化类即可,NSData作为中间桥梁 //1.字典转换为字符串(JSON格式),利用 NSData作为桥梁; NSDictionary *dic = @{@"name":@"Lisi",@"sex":@"m",@"tel&qu

  • Android常用正则表达式验证工具类(实例代码)

    东西不多,但一般项目够用了. public class RegularUtil { //身份证 public static final String REGEX_ID_CARD = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$"; //验证邮箱 public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\

  • 替换php字符串中的单引号为双引号的方法

    实例如下: $param = "{'id':'12', 'name':'hi'}"; $new = preg_replace('/\"/', '"', $param); 以上这篇替换php字符串中的单引号为双引号的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • CodeIgniter扩展核心类实例详解

    本文实例讲述了CodeIgniter扩展核心类的方法.分享给大家供大家参考,具体如下: CI中对核心类.辅助类和函数的扩展是相当方便的,配置文件中指定了subclass_prefix扩展前缀,默认为MY_,扩展时需要以该配置为前缀,下面整理下扩展方式. 1.扩展核心类 核心类位于system/core下,其中大部分类会在初始化的时候自动加载.扩展核心类的方式有两种:替换核心类和继承核心类. 替换核心类 当application/core目录下存在与system/core同名的文件时会自动替换掉核

  • Python字符串处理实例详解

    Python字符串处理实例详解 一.拆分含有多种分隔符的字符串 1.如何拆分含有多种分隔符的字符串 问题: 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符,例如: s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" 其中;,|,\t 都是分隔符号,如何处理? 方法一: 连续使用str.split()方法,每次处理一种分隔符号 s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz&q

随机推荐