首页 > 开发 > PHP > 正文

PHP实现过滤各种HTML标签

2024-05-04 23:35:20
字体:
来源:转载
供稿:网友

在做项目的过程中,我们经常需要用到过滤一些html标签来实现提高数据的安全性,其实就是删除那些对应用程序有潜在危害的数据。它用于去除标签以及删除或编码不需要的字符。

首先分享一些比较常见的

 

 
  1. $str=preg_replace("/<s*imgs+[^>]*?srcs*=s*('|")(.*?)/1[^>]*?/?s*>/i","", $str); //过滤img标签 
  2.  
  3. $str=preg_replace("/s+/",""$str); //过滤多余回车 
  4.  
  5. $str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格) 
  6.  
  7. $str=preg_replace("/<!--.*?-->/si","",$str); //注释 
  8.  
  9. $str=preg_replace("/<(!.*?)>/si","",$str); //过滤DOCTYPE 
  10.  
  11. $str=preg_replace("/<(/?html.*?)>/si","",$str); //过滤html标签 
  12.  
  13. $str=preg_replace("/<(/?head.*?)>/si","",$str); //过滤head标签 
  14.  
  15. $str=preg_replace("/<(/?meta.*?)>/si","",$str); //过滤meta标签 
  16.  
  17. $str=preg_replace("/<(/?body.*?)>/si","",$str); //过滤body标签 
  18.  
  19. $str=preg_replace("/<(/?link.*?)>/si","",$str); //过滤link标签 
  20.  
  21. $str=preg_replace("/<(/?form.*?)>/si","",$str); //过滤form标签 
  22.  
  23. $str=preg_replace("/cookie/si","COOKIE",$str); //过滤COOKIE标签 
  24.  
  25. $str=preg_replace("/<(applet.*?)>(.*?)<(/applet.*?)>/si","",$str); //过滤applet标签 
  26.  
  27. $str=preg_replace("/<(/?applet.*?)>/si","",$str); //过滤applet标签 
  28.  
  29. $str=preg_replace("/<(style.*?)>(.*?)<(/style.*?)>/si","",$str); //过滤style标签 
  30.  
  31. $str=preg_replace("/<(/?style.*?)>/si","",$str); //过滤style标签 
  32.  
  33. $str=preg_replace("/<(title.*?)>(.*?)<(/title.*?)>/si","",$str); //过滤title标签 
  34.  
  35. $str=preg_replace("/<(/?title.*?)>/si","",$str); //过滤title标签 
  36.  
  37. $str=preg_replace("/<(object.*?)>(.*?)<(/object.*?)>/si","",$str); //过滤object标签 
  38.  
  39. $str=preg_replace("/<(/?objec.*?)>/si","",$str); //过滤object标签 
  40.  
  41. $str=preg_replace("/<(noframes.*?)>(.*?)<(/noframes.*?)>/si","",$str); //过滤noframes标签 
  42.  
  43. $str=preg_replace("/<(/?noframes.*?)>/si","",$str); //过滤noframes标签 
  44.  
  45. $str=preg_replace("/<(i?frame.*?)>(.*?)<(/i?frame.*?)>/si","",$str); //过滤frame标签 
  46.  
  47. $str=preg_replace("/<(/?i?frame.*?)>/si","",$str); //过滤frame标签 
  48.  
  49. $str=preg_replace("/<(script.*?)>(.*?)<(/script.*?)>/si","",$str); //过滤script标签 
  50.  
  51. $str=preg_replace("/<(/?script.*?)>/si","",$str); //过滤script标签 
  52.  
  53. $str=preg_replace("/javascript/si","Javascript",$str); //过滤script标签 
  54.  
  55. $str=preg_replace("/vbscript/si","Vbscript",$str); //过滤script标签 
  56.  
  57. $str=preg_replace("/on([a-z]+)s*=/si","On/1=",$str); //过滤script标签 
  58.  
  59. $str=preg_replace("/&#/si","&#",$str); //过滤script标签 

更简单些的写法:

 

 
  1. function delhtml($str){ //清除html标签 
  2. $st=-1; //开始 
  3. $et=-1; //结束 
  4. $stmp=array(); 
  5. $stmp[]=""
  6. $len=strlen($str); 
  7. for($i=0;$i<$len;$i++){ 
  8. $ss=substr($str,$i,1); 
  9. if(ord($ss)==60){ //ord("<")==60 
  10. $st=$i
  11. if(ord($ss)==62){ //ord(">")==62 
  12. $et=$i
  13. if($st!=-1){ 
  14. $stmp[]=substr($str,$st,$et-$st+1); 
  15. $str=str_replace($stmp,"",$str); 
  16. return $str

再来一个:

 

 
  1. function clear_html_label($html)  
  2. {  
  3. $search = array ("'<script[^>]*?>.*?</script>'si""'<[/!]*?[^<>]*?>'si""'([rn])[s]+'""'&(quot|#34);'i""'&(amp|#38);'i""'&(lt|#60);'i""'&(gt|#62);'i""'&(nbsp|#160);'i""'&(iexcl|#161);'i""'&(cent|#162);'i""'&(pound|#163);'i""'&(copy|#169);'i""'&#(d+);'e");  
  4. $replace = array ("""""1"""", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), "chr(1)"); 
  5. return preg_replace($search$replace$html);  

以上三种方法均可以实现,不过各有优劣,小伙伴们根据自己的项目需求来选择吧。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表