带有特定ID的div的Strip_tags?

时间:2009-09-08 06:47:55

标签: php

是否有人知道修改后的strip_tags函数是否存在,您可以在其中指定要剥离的标记的ID,并且可能还指定删除标记中的所有数据。举个例子:

<div id="one">
  <div id="two">
    bla bla bla
  </div>
</div>

Running:


new_strip_tags($data, 'two', true);

必须返回:

<div id="one">
</div>

那里有类似的东西吗?

2 个答案:

答案 0 :(得分:8)

您可以使用DOMDocumentDOMXPath

<?php
$html = '<html><head><title>...</title></head><body>
  <div id="one">
    <div id="two">
      bla bla bla
    </div>
  </div>
</body></html>';

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->loadhtml($html);

$xpath = new DOMXPath($doc);

$ns = $xpath->query('//div[@id="two"]');
// there can be only one... but anyway
foreach($ns as $node) {
  $node->parentNode->removeChild($node);
}
echo $doc->savehtml();

答案 1 :(得分:1)

这不完全是strip_tags的作用,它剥离了标签但留下了内容。你想要的是这样的:

function remove_div_with_id($html, $id) {
    return preg_replace('/<div[^>]+id="'.preg_quote($id, '/').'"[^>]*>(.*?)<\/div>/s', '', $html);
}

请注意,这对嵌套标记无效。如果需要,可能需要使用HTML的DOM表示。