从PHP中的字符串中删除HTML标记

时间:2012-03-13 08:50:42

标签: php regex

根据帖子here,下面的代码可以删除HTML标记,例如<div>。但我发现结束标记</div>仍然保留在字符串中。

$content = "<div id=\"header\">this is something with an <img src=\"test.png\"/> in it.</div>";
$content = preg_replace("/<div[^>]+\>/i", "", $content); 
echo $content;

我已尝试过以下内容,但仍无效,我该如何解决此问题?

$content = preg_replace("/<\/div[^>]+\>/i", "", $content); 
$content = preg_replace("/<(/)div[^>]+\>/i", "", $content); 

由于

4 个答案:

答案 0 :(得分:6)

结束标记在div和>之间没有任何内容,所以请尝试类似:

$content = preg_replace("/<\/?div[^>]*\>/i", "", $content); 

这将删除表单的模式:

<div>
</div>
<div class=...>

答案 1 :(得分:3)

将其更改为"/<[\/]*div[^>]*>/i"

答案 2 :(得分:1)

如果你能保证传入的HTML在某种程度上是有效的和结构化的,你应该对正则表达式没用。

但是,一般情况下,最好避免使用正则表达式来处理HTML,因为标记可能会如此变化和混乱。相反,尝试使用像DOMDocument这样的库 - 它会为你处理所有混乱。

使用DOMDocument,您可以执行以下操作:

$doc = new DOMDocument;
$doc->loadHTML($html);
$headerElement = $doc->getElementById('header');
$headerElement->parentNode->removeChild($headerElement);
$amendedHtml = $doc->saveHTML(); 

答案 3 :(得分:0)

$content = preg_replace("/<\/?(div|b|span)[^>]*\>/i", "", $content); 

删除所有

<div...>
</div>
<b....>
</b>
<span...>
</span>