php去除HTML标签多个实例详解

jerry PHP 2015年08月28日 收藏

实例一

php有效的过滤html标签,js代码,css样式标签:

<?php 
$str = preg_replace( "@<script(.*?)</script>@is", "", $str ); 
$str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str ); 
$str = preg_replace( "@<style(.*?)</style>@is", "", $str ); 
$str = preg_replace( "@<(.*?)>@is", "", $str ); 
?>

,全是正则过滤HTML标签,但是今天自己拿来用都不好用了.原因??就是标签转义了.比如<br >.页面上显示的是这个.但是源文件却显示的像这样:”——但是我们还是可以处理,先把内容全部反编译过来.再过滤就行了.

$str= htmlspecialchars_decode($str);

用htmlspecialchars_decode这个函数的就是把源文件转成<>这样的标签.然后”:

$str= preg_replace("/<(.*?)>/","",$str);


实例二

php自带的函数可以去除/删除字符串中的HTML标签/代码。
strip_tags(string,allow):函数剥去 HTML、XML 以及 PHP 的标签。
参数:string,必填,规定要检查的字符串;allow,选填,规定允许存在的标签,这些标签不会被删除。

$str = '郭碗瓢盆-<span style="color:#f00;">PHP</span>'; 
$str1 = strip_tags($str);          // 删除所有HTML标签 
$str2 = strip_tags($str,'<span>'); // 保留 <span>标签 
echo $str1; // 输出 郭碗瓢盆-PHP 
echo $str2; // 样式不一样喔


例2、清除HTML标签字符串中某些属性代码
使用PHP处理从数据库中读取的文章HTML代码,然后用正则对代码进行匹配与修改,保存代码以后,用静态生成功能即可生成修改后的HTML页面了。
因为我们生成的代码是已经处理过的代码,所以就不会影响HTML页面的加载速度了。
具体 [示例代码]如下:

<?php 
$str = "<img src="" width="245" height="138" onclick="window.open('xxxx.gif')" />"; 
$str = preg_replace('#onclick=([sS]*)"#','',$str); 
// #符号前面有一个双引号要注意,代表结束的代码 
print($str); 
?>


实例三

$str=preg_replace("/\s+/", " ", $str); //过滤多余回车
$str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格)
  
$str=preg_replace("/<\!--.*?-->/si","",$str); //注释
$str=preg_replace("/<(\!.*?)>/si","",$str); //过滤DOCTYPE
$str=preg_replace("/<(\/?html.*?)>/si","",$str); //过滤html标签
$str=preg_replace("/<(\/?head.*?)>/si","",$str); //过滤head标签
$str=preg_replace("/<(\/?meta.*?)>/si","",$str); //过滤meta标签
$str=preg_replace("/<(\/?body.*?)>/si","",$str); //过滤body标签
$str=preg_replace("/<(\/?link.*?)>/si","",$str); //过滤link标签
$str=preg_replace("/<(\/?form.*?)>/si","",$str); //过滤form标签
$str=preg_replace("/cookie/si","COOKIE",$str); //过滤COOKIE标签
  
$str=preg_replace("/<(applet.*?)>(.*?)<(\/applet.*?)>/si","",$str); //过滤applet标签
$str=preg_replace("/<(\/?applet.*?)>/si","",$str); //过滤applet标签
  
$str=preg_replace("/<(style.*?)>(.*?)<(\/style.*?)>/si","",$str); //过滤style标签
$str=preg_replace("/<(\/?style.*?)>/si","",$str); //过滤style标签
  
$str=preg_replace("/<(title.*?)>(.*?)<(\/title.*?)>/si","",$str); //过滤title标签
$str=preg_replace("/<(\/?title.*?)>/si","",$str); //过滤title标签
  
$str=preg_replace("/<(object.*?)>(.*?)<(\/object.*?)>/si","",$str); //过滤object标签
$str=preg_replace("/<(\/?objec.*?)>/si","",$str); //过滤object标签
  
$str=preg_replace("/<(noframes.*?)>(.*?)<(\/noframes.*?)>/si","",$str); //过滤noframes标签
$str=preg_replace("/<(\/?noframes.*?)>/si","",$str); //过滤noframes标签
  
$str=preg_replace("/<(i?frame.*?)>(.*?)<(\/i?frame.*?)>/si","",$str); //过滤frame标签
$str=preg_replace("/<(\/?i?frame.*?)>/si","",$str); //过滤frame标签
  
$str=preg_replace("/<(script.*?)>(.*?)<(\/script.*?)>/si","",$str); //过滤script标签
$str=preg_replace("/<(\/?script.*?)>/si","",$str); //过滤script标签
$str=preg_replace("/javascript/si","Javascript",$str); //过滤script标签
$str=preg_replace("/vbscript/si","Vbscript",$str); //过滤script标签
$str=preg_replace("/on([a-z]+)\s*=/si","On\\1=",$str); //过滤script标签
$str=preg_replace("/&#/si","&#",$str); //过滤script标签,如javAsCript:alert(


清除空格,换行

function DeleteHtml($str)
{
$str = trim($str);
$str = strip_tags($str,"");
$str = ereg_replace("\t","",$str);
$str = ereg_replace("\r\n","",$str);
$str = ereg_replace("\r","",$str);
$str = ereg_replace("\n","",$str);
$str = ereg_replace(" "," ",$str);
return trim($str);
}


过滤HTML属性

1,过滤所有html标签的正则表达式:
 
</?[^>]+>
 
//过滤所有html标签的属性的正则表达式:
 
$html = preg_replace("/<([a-zA-Z]+)[^>]*>/","<\\1>",$html);
3,过滤部分html标签的正则表达式的排除式(比如排除<p>,即不过滤<p>):
</?[^pP/>]+>
4,过滤部分html标签的正则表达式的枚举式(比如需要过滤<a><p><b>等):
</?[aApPbB][^>]*>
5,过滤部分html标签的属性的正则表达式的排除式(比如排除alt属性,即不过滤alt属性):
\s(?!alt)[a-zA-Z]+=[^\s]*
6,过滤部分html标签的属性的正则表达式的枚举式(比如alt属性):
(\s)alt=[^\s]*


实例四

语法:strip_tags(string,allow);
string必需,规定要检查的字符串。
allow可选,规定允许的标签,这些标签不会被删除。
注释:该函数始终会剥离HTML注释,这点无法通过allow参数改变。
实例:

<?php
    $str = "Hello <b><i>world</i></b>!";
    echo strip_tags($str);
    echo '<br />';
    echo strip_tags($str, '<b><i>');
?>

输出结果:

Hello world!
Hello world!


实例五

strip_tags 
  去掉 HTML 及 PHP 的标记。
  语法: string strip_tags(string str);
  传回值: 字串
  函式种类: 资料处理
  内容说明 
  本函式可去掉字串中包含的任何 HTML 及 PHP 的标记字串。若是字串的 HTML 及 PHP 标签原来就有错,例如少了大于的符号,则也会传回错误。而本函式和 fgetss() 有着相同的功能。
htmlspecialchars 
  将特殊字元转成 HTML 格式。
  语法: string htmlspecialchars(string string);
  传回值: 字串
  函式种类: 资料处理
  本函式将特殊字元转成 HTML 的字串格式 ( &....; )。最常用到的场合可能就是处理客户留言的留言版了。
  & (和) 转成 & 
  " (双引号) 转成 " 
  < (小于) 转成 <
  > (大于) 转成 > 
  '' (单引号) 转成 ' 
  此函式只转换上面的特殊字元,并不会全部转换成 HTML 所定的 ASCII 转换。
<?php  
     $new  = htmlspecialchars( "<a href='test'>Test</a>" , ENT_QUOTES);  
     echo   $new ;   
?>

结果:

<a href='test'>Test</a>