Belirli bir kimliği ile div için PHP strip_tags?

2 Cevap

Budamak için etiketleri kimliğini belirtebilirsiniz ve possbile da etiketlerindeki tüm verileri kaldırmak için belirtmek nerede değiştirilmiş strip_tags işlev exsists olmadığını herkes biliyor. Örneğin alın:

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

Running:


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

Döndürmesi gerekir:

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

Orada böyle bir şey var mı?

2 Cevap

Yani etiketleri soyarak ama içeriği bırakır, strip_tags ne yaptığını tam olarak değil. Ne istiyorsun bu gibi bir şeydir:

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

Bu iç içe etiketleri ile düzgün çalışmıyor unutmayın. Eğer ihtiyacınız varsa, size bir HTML DOM gösterimini kullanmak isteyebilirsiniz.

Sen DOMDocument kullanın ve DOMXPath Bunun için olabilir.

<?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();