当前位置:首页 > PHP教程 > php函数 > 列表

php中str_replace替换实例讲解

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-12 08:37:39 浏览: 评论:0 

在对于字符串的替换上,我们已经学过了不少的方法。但在做练习题的时候,我们会对多个字符串进行替换。从方法的实用性来说,str_replace就非常适合处理多个字符串的替换问题。下面我们就php中str_replace的概念、语法、参数、返回值进行讲解,然后带来替换的实例分享。

1、概念

str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。

该函数区分大小写。请使用 str_ireplace() 函数执行不区分大小写的搜索。

2、语法

str_replace(find,replace,string,count)

3、参数

Find、replace、string、count

4、返回值

返回带有替换值的字符串或数组。

5、实例

创建一个PHP示例文件;然后通过“tr_replace($vowels, "","Hello World of PHP");”方法替换多个字符串即可。

  1. echo str_replace(array("m","i"),array("n","z"),"my name is jim!"
  2.  
  3. echo str_replace(array('m','i'),'n',"my name is jim!"); 
  4.  
  5. $vowels = array("a""e""i""o""u""A""E""I""O""U"); 
  6.  
  7. $onlyconsonants = str_replace($vowels"","Hello World of PHP"); 
  8. echo $onlyconsonants

知识点扩展:

PHP利用str_replace防注入的方法

  1. <?php 
  2.  /** 
  3.  * 安全过滤函数 
  4.  * 
  5.  * @param $string 
  6.  * @return string 
  7.  */ 
  8.  function safe_replace($string) { 
  9.  $string = str_replace('%20','',$string); 
  10.  $string = str_replace('%27','',$string); 
  11.  $string = str_replace('%2527','',$string); 
  12.  $string = str_replace('*','',$string); 
  13.  $string = str_replace('"','&quot;',$string); 
  14.  $string = str_replace("'",'',$string); 
  15.  $string = str_replace('"','',$string); 
  16.  $string = str_replace(';','',$string); 
  17.  $string = str_replace('<','&lt;',$string); 
  18.  $string = str_replace('>','&gt;',$string); 
  19.  $string = str_replace("{",'',$string); 
  20.  $string = str_replace('}','',$string); 
  21.  $string = str_replace('','',$string); 
  22.  return $string
  23.  } 
  24.  ?> 
  25.  
  26.  <?php 
  27.  /** 
  28.  * 返回经addslashes处理过的字符串或数组 
  29.  * @param $string 需要处理的字符串或数组 
  30.  * @return mixed 
  31.  */ 
  32.  function new_addslashes($string) { 
  33.  if(!is_array($string)) return addslashes($string); 
  34.  foreach($string as $key => $val$string[$key] = new_addslashes($val); 
  35.  return $string
  36.  } 
  37.  ?> 
  38.  
  39.  <?php 
  40.  //对请求的字符串进行安全处理 
  41.  /* 
  42.  $safestep 
  43.  0 为不处理, 
  44.  1 为禁止不安全HTML内容(javascript等), 
  45.  2 完全禁止HTML内容,并替换部份不安全字符串(如:eval(、union、CONCAT(、--、等) 
  46.  */ 
  47.  function StringSafe($str$safestep=-1){ 
  48.  $safestep = ($safestep > -1) ? $safestep : 1; 
  49.  if($safestep == 1){ 
  50.  $str = preg_replace("#script:#i""script:"$str); 
  51.  $str = preg_replace("#<[/]{0,1}(link|meta|ifr|fra|scr)[^>]*>#isU"''$str); 
  52.  $str = preg_replace("#[ ]{1,}#"' '$str); 
  53.  return $str
  54.  }else if($safestep == 2){ 
  55.  $str = addslashes(htmlspecialchars(stripslashes($str))); 
  56.  $str = preg_replace("#eval#i"'eval'$str); 
  57.  $str = preg_replace("#union#i"'union'$str); 
  58.  $str = preg_replace("#concat#i"'concat'$str); 
  59.  $str = preg_replace("#--#"'--'$str); 
  60.  $str = preg_replace("#[ ]{1,}#"' '$str); 
  61.  return $str
  62.  }else
  63.  return $str
  64.  } 
  65.  } 
  66.  ?> 
  67.  
  68.  <?php 
  69.     /** 
  70.      +---------------------------------------------------------- 
  71.      * 输出安全的html,用于过滤危险代码 
  72.      +---------------------------------------------------------- 
  73.      * @access public 
  74.      +---------------------------------------------------------- 
  75.      * @param string $text 要处理的字符串 
  76.      * @param mixed $tags 允许的标签列表,如 table|td|th|td 
  77.      +---------------------------------------------------------- 
  78.      * @return string 
  79.      +---------------------------------------------------------- 
  80.      */ 
  81.     static public function safeHtml($text$tags = null) 
  82.     { 
  83.         $text =  trim($text); 
  84.         //完全过滤注释 
  85.         $text = preg_replace('/<!--?.*-->/','',$text); 
  86.         //完全过滤动态代码 
  87.         $text =  preg_replace('/<?|?'.'>/','',$text); 
  88.         //完全过滤js 
  89.         $text = preg_replace('/<script?.*/script>/','',$text); 
  90.         $text =  str_replace('[','&#091;',$text); 
  91.         $text = str_replace(']','&#093;',$text); 
  92.         $text =  str_replace('|','&#124;',$text); 
  93.         //过滤换行符 
  94.         $text = preg_replace('/ ? /','',$text); 
  95.         //br 
  96.         $text =  preg_replace('/<br(s/)?'.'>/i','[br]',$text); 
  97.         $text = preg_replace('/([br]s*){10,}/i','[br]',$text); 
  98.         //过滤危险的属性,如:过滤on事件lang js 
  99.         while(preg_match('/(<[^><]+)(lang|on|action|background|codebase|dynsrc|lowsrc)[^><]+/i',$text,$mat)){ 
  100.             $text=str_replace($mat[0],$mat[1],$text); 
  101.         } 
  102.         while(preg_match('/(<[^><]+)(window.|javascript:|js:|about:|file:|document.|vbs:|cookie)([^><]*)/i',$text,$mat)){ 
  103.             $text=str_replace($mat[0],$mat[1].$mat[3],$text); 
  104.         } 
  105.         ifemptyempty($allowTags) ) { $allowTags = self::$htmlTags['allow']; } 
  106.         //允许的HTML标签 
  107.         $text =  preg_replace('/<('.$allowTags.')( [^><[]]*)>/i','[12]',$text); 
  108.         //过滤多余html 
  109.         if ( emptyempty($banTag) ) { $banTag = self::$htmlTags['ban']; } 
  110.         $text =  preg_replace('/</?('.$banTag.')[^><]*>/i','',$text); 
  111.         //过滤合法的html标签 
  112.         while(preg_match('/<([a-z]+)[^><[]]*>[^><]*</1>/i',$text,$mat)){ 
  113.             $text=str_replace($mat[0],str_replace('>',']',str_replace('<','[',$mat[0])),$text); 
  114.         } 
  115.         //转换引号 
  116.         while(preg_match('/([[^[]]*=s*)("|')([^2=[]]+)2([^[]]*])/i',$text,$mat)){ 
  117.             $text=str_replace($mat[0],$mat[1].'|'.$mat[3].'|'.$mat[4],$text); 
  118.         } 
  119.         //空属性转换 
  120.         $text =  str_replace('''','||',$text); 
  121.         $text = str_replace('""','||',$text); 
  122.         //过滤错误的单个引号 
  123.         while(preg_match('/[[^[]]*("|')[^[]]*]/i',$text,$mat)){ 
  124.             $text=str_replace($mat[0],str_replace($mat[1],'',$mat[0]),$text); 
  125.         } 
  126.         //转换其它所有不合法的 < > 
  127.         $text =  str_replace('<','&lt;',$text); 
  128.         $text = str_replace('>','&gt;',$text); 
  129.         $text = str_replace('"','&quot;',$text); 
  130.         //反转换 
  131.         $text =  str_replace('[','<',$text); 
  132.         $text =  str_replace(']','>',$text); 
  133.         $text =  str_replace('|','"',$text); 
  134.         //过滤多余空格 
  135.         $text =  str_replace('  ',' ',$text); 
  136.         return $text
  137.     } 
  138.  ?> 
  139.  
  140.  <?php 
  141.  function RemoveXSS($val) {  
  142.     // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed  
  143.     // this prevents some character re-spacing such as <javascript>  
  144.     // note that you have to handle splits with , , and later since they *are* allowed in some          // inputs  
  145.     $val = preg_replace('/([x00-x08,x0b-x0c,x0e-x19])/'''$val);  
  146.     // straight replacements, the user should never need these since they're normal characters  
  147.     // this prevents like <IMG SRC=@avascript:alert('XSS')>  
  148.     $search = 'abcdefghijklmnopqrstuvwxyz';  
  149.     $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';  
  150.     $search .= '1234567890!@#$%^&*()';  
  151.     $search .= '~`";:?+/={}[]-_|'';  
  152.     for ($i = 0; $i < strlen($search); $i++) {  
  153.         // ;? matches the ;, which is optional  
  154.         // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars  
  155.         // @ @ search for the hex values  
  156.         $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i'$search[$i], $val);//with a ;  
  157.         // @ @ 0{0,7} matches '0' zero to seven times  
  158.         $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/'$search[$i], $val); // with a ;  
  159.     }  
  160.     // now the only remaining whitespace attacks are , , and   
  161.     $ra1 = Array('javascript''vbscript''expression''applet''meta''xml''blink''link''style''script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base');  
  162.     $ra2 = Array('onabort''onactivate''onafterprint''onafterupdate''onbeforeactivate''onbeforecopy''onbeforecut''onbeforedeactivate''onbeforeeditfocus''onbeforepaste''onbeforeprint''onbeforeunload''onbeforeupdate''onblur''onbounce''oncellchange''onchange''onclick''oncontextmenu''oncontrolselect''oncopy''oncut''ondataavailable''ondatasetchanged''ondatasetcomplete''ondblclick''ondeactivate''ondrag''ondragend''ondragenter''ondragleave''ondragover''ondragstart''ondrop''onerror''onerrorupdate''onfilterchange''onfinish''onfocus''onfocusin''onfocusout''onhelp''onkeydown''onkeypress''onkeyup''onlayoutcomplete''onload''onlosecapture''onmousedown''onmouseenter''onmouseleave''onmousemove''onmouseout''onmouseover''onmouseup''onmousewheel''onmove''onmoveend''onmovestart''onpaste''onpropertychange''onreadystatechange''onreset''onresize''onresizeend''onresizestart''onrowenter''onrowexit''onrowsdelete''onrowsinserted''onscroll''onselect''onselectionchange''onselectstart''onstart''onstop''onsubmit''onunload');  
  163.     $ra = array_merge($ra1$ra2);  
  164.     $found = true; // keep replacing as long as the previous round replaced something  
  165.     while ($found == true) {  
  166.         $val_before = $val;  
  167.         for ($i = 0; $i < sizeof($ra); $i++) {  
  168.             $pattern = '/';  
  169.             for ($j = 0; $j < strlen($ra[$i]); $j++) {  
  170.                 if ($j > 0) {  
  171.                     $pattern .= '(';  
  172.                     $pattern .= '(&#[xX]0{0,8}([9ab]);)';  
  173.                     $pattern .= '|';  
  174.                     $pattern .= '|(&#0{0,8}([9|10|13]);)';  
  175.                     $pattern .= ')*';  
  176.                 }  
  177.                 $pattern .= $ra[$i][$j];  
  178.             }  
  179.             $pattern .= '/i';  
  180.             $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag  
  181.             $val = preg_replace($pattern$replacement$val); // filter out the hex tags  
  182.             if ($val_before == $val) {  
  183.                 // no replacements were made, so exit the loop  
  184.                 $found = false;  
  185.             }  
  186.         }  
  187.     }  
  188.     return $val;  
  189.  } 
  190.  ?>

Tags: str_replace

分享到: