从指定的html标记中删除class / style / junk

时间:2014-02-18 22:07:10

标签: php regex

使用PHP和Regex,如何从标签内删除所有不需要的样式,类或其他垃圾?

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 - 我正在服务器端。感谢。

1 个答案:

答案 0 :(得分: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

的新标记