Heim  >  Artikel  >  Backend-Entwicklung  >  php 替换敏感字符串的类(附源码)

php 替换敏感字符串的类(附源码)

WBOY
WBOYOriginal
2016-07-25 08:55:241091Durchsuche
  1. /** string filter class
  2. * Date: 2013-01-09
  3. * Author: fdipzone
  4. * Ver: v1.0
  5. * Edit: bbs.it-home.org
  6. * Func:
  7. * public replace 替换非法字符
  8. * public check 检查是否含有非法字符
  9. * private protect_white_list 保护白名单
  10. * private resume_white_list 还原白名单
  11. * private getval 白名单 key转为value
  12. */
  13. class StrFilter{ // class start
  14. private $_white_list = array();
  15. private $_black_list = array();
  16. private $_replacement = '*';
  17. private $_LTAG = '[[##';
  18. private $_RTAG = '##]]';
  19. /**
  20. * @param Array $white_list
  21. * @param Array $black_list
  22. * @param String $replacement
  23. */
  24. public function __construct($white_list=array(), $black_list=array(), $replacement='*'){
  25. $this->_white_list = $white_list;
  26. $this->_black_list = $black_list;
  27. $this->_replacement = $replacement;
  28. }
  29. /** 替换非法字符
  30. * @param String $content 要替換的字符串
  31. * @return String 替換后的字符串
  32. */
  33. public function replace($content){
  34. if(!isset($content) || $content==''){
  35. return '';
  36. }
  37. // protect white list
  38. $content = $this->protect_white_list($content);
  39. // replace black list
  40. if($this->_black_list){
  41. foreach($this->_black_list as $val){
  42. $content = str_replace($val, $this->_replacement, $content);
  43. }
  44. }
  45. // resume white list
  46. $content = $this->resume_white_list($content);
  47. return $content;
  48. }
  49. /** 检查是否含有非法自符
  50. * @param String $content 字符串
  51. * @return boolean
  52. */
  53. public function check($content){
  54. if(!isset($content) || $content==''){
  55. return true;
  56. }
  57. // protect white list
  58. $content = $this->protect_white_list($content);
  59. // check
  60. if($this->_black_list){
  61. foreach($this->_black_list as $val){
  62. if(strstr($content, $val)!=''){
  63. return false;
  64. }
  65. }
  66. }
  67. return true;
  68. }
  69. /** 保护白名单
  70. * @param String $content 字符串
  71. * @return String
  72. */
  73. private function protect_white_list($content){
  74. if($this->_white_list){
  75. foreach($this->_white_list as $key=>$val){
  76. $content = str_replace($val, $this->_LTAG.$key.$this->_RTAG, $content);
  77. }
  78. }
  79. return $content;
  80. }
  81. /** 还原白名单
  82. * @param String $content
  83. * @return String
  84. */
  85. private function resume_white_list($content){
  86. if($this->_white_list){
  87. $content = preg_replace_callback("/\[\[##(.*?)##\]\].*?/si", array($this, 'getval'), $content);
  88. }
  89. return $content;
  90. }
  91. /** 白名单 key还原为value
  92. * @param Array $matches 匹配white_list的key
  93. * @return String white_list val
  94. */
  95. private function getval($matches){
  96. return isset($this->_white_list[$matches[1]])? $this->_white_list[$matches[1]] : ''; // key->val
  97. }
  98. } // class end
  99. ?>
复制代码

2,演示示例 demo.php

  1. header("content-type:text/html;charset=utf8");
  2. require("StrFilter.class.php");
  3. $white = array('屌丝', '曹操');
  4. $black = array('屌', '操');
  5. $content = "我操,曹操你是屌丝,我屌你啊";
  6. $obj = new StrFilter($white, $black);
  7. echo $obj->replace($content);
  8. ?>
复制代码

附,php 替换敏感字符串的类源码下载地址。



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn