除了标记之外,还使用strip_tags()来删除标记属性

时间:2014-01-26 06:13:13

标签: php

我知道并知道如何在php中使用strip_tags(),但我想删除这些标签中包含的所有样式。

我只需要保留以下标签

<p></p>
<a></a>
<br />

不确定br是否被认为是带有strip_tags的标记,因此我将其包括在内。

之前的例子:

<p style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 13px; padding: 0px; margin: 3px 0px 10px; color: rgb(0, 0, 0); line-height: 16px;">

后:

<p>

问题是我不确定我是否可以使用条带标记完成此操作,或者我是否还需要包含带有一些REGEX的preg_replace。此外,造型可能会有所不同,因此它需要能够处理任何事情。

我在php.net上找到了一个例子,但似乎无法正常工作

function strip_tags_content($text, $tags = '', $invert = FALSE) { 

  preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags); 
  $tags = array_unique($tags[1]); 

  if(is_array($tags) AND count($tags) > 0) { 
    if($invert == FALSE) { 
      return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text); 
    } 
    else { 
      return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text); 
    } 
  } 
  elseif($invert == FALSE) { 
    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text); 
  } 
  return $text; 
}
?>
<?=strip_tags_content($row['notes'])?></p>

2 个答案:

答案 0 :(得分:1)

我会做类似的事情:

$x = preg_replace("/<(p|a|b|div) [^>]*>/", "<$1>", $x);

当然还有所有相关标签。 请注意,如果任何参数的参数为​​&gt;登录它所以你必须以某种方式处理报价。

答案 1 :(得分:0)

如果您只想在执行strip_tags($text, '<p><a><br>')

之后删除元素中的样式,则可以使用JQuery

JQuery代码

$("container").children().each(function()
    {
        $(this).attr('style','');
    });

<强> Fiddle demo