2014-02-18 145 views
-1

使用PHP和正则表达式,如何从标签中去除所有不需要的样式,类或其他垃圾?从指定的html标签中删除类/样式/垃圾

EG:

<span class="blah" style="blah" any other junk >...</span> 

将被清洗,这一点:<span>...</span>

我试图把一个函数像这样:

function cleanTag($html, $tagType='div'){ 
    $html = // regex to clean out all tags of $tagType in $html 
    return $html; 
} 

我想这对我设置为$tagType任何标签类型的工作。

需要在PHP中 - 我在做服务器端。谢谢。

+0

其他可能的重复项:https://stackoverflow.com/questions/4179206或https://stackoverflow.com/questions/12104962或https://stackoverflow.com/questions/6371527 。还可以查看更多相关部分。 – Gordon

回答

1

如果你只是想针对你需要动态调整正则表达式,请务必使用preg_quote,以避免让在$tagType参数正则表达式匹配特定的标记。

以下函数将使用比先前答案更严格的标签限制,例如,在功能代码后尝试测试。

function cleanTag($html, $tagType = 'div') { 
    if ($tagType) { 
     // match specific tag 
     $tagType = preg_quote($tagType); 
    } else { 
     // match all tags 
     $tagType = '[\w\d]+'; 
    } 

    return preg_replace("/<\s*($tagType).*?>/si", '<$1>', $html); 
} 

http://phpfiddle.org/main/code/9q7-bnr

文本说明:

  • /
  • <匹配开括号
  • \s*匹配零个或多个空格字符(空格,制表,换行)
  • ([\w\d]+)/($tagType)捕获的字母数字/明确的标签名
  • .*?>匹配零个或多个字符,直到结束标记发现
  • /si点字符相匹配的新线和大小写的比较

的字符串替换整个匹配包含捕获标签的新标签$1