>  기사  >  백엔드 개발  >  PHP를 사용하여 민감한 문자열 관련 작업을 대체하는 방법

PHP를 사용하여 민감한 문자열 관련 작업을 대체하는 방법

jacklove
jacklove원래의
2018-06-09 16:20:251449검색

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 = &#39;*&#39;;
    private $_LTAG = &#39;[[##&#39;;
    private $_RTAG = &#39;##]]&#39;;
    /**
    * @param Array  $white_list
    * @param Array  $black_list
    * @param String $replacement
    */
    public function __construct($white_list=array(), $black_list=array(), $replacement=&#39;*&#39;){
        $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==&#39;&#39;){
            return &#39;&#39;;
        }
        // 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==&#39;&#39;){
            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)!=&#39;&#39;){
                    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, &#39;getval&#39;), $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]] : &#39;&#39;; // key->val
    }
} // class end
?>

demo

<?php
	header("content-type:text/html;charset=utf8");
	require("StrFilter.class.php");
	$white = array(&#39;屌丝&#39;, &#39;曹操&#39;);
	$black = array(&#39;屌&#39;, &#39;操&#39;);
	$content = "我操,曹操你是屌丝,我屌你啊";
	$obj = new StrFilter($white, $black);
	echo $obj->replace($content);
?>

이 글에서는 PHP를 사용하여 민감한 문자열을 바꾸는 방법을 설명합니다. 자세한 내용은 PHP 중국어 웹사이트를 참조하세요.

관련 권장 사항:

PHP 정보 폴더 및 파일 클래스 탐색과 처리 클래스

PHP를 통해 페이지에서 지정된 콘텐츠 클래스를 가져오는 방법

php는 재개된 다운로드에 대한 파일 다운로드 클래스를 지원합니다. 설명

위 내용은 PHP를 사용하여 민감한 문자열 관련 작업을 대체하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.