根据帖子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);
由于
答案 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>