Ben HTML parçacığını tüm yayılma kaldırmak için simple_html_dom kullanmaya çalışıyorum, ve ben şu kullanıyorum:
$body = "<span class='outer' style='background:red'>x<span class='mid' style='background:purple'>y<span class='inner' style='background:orange'>z</span></span></span>";
$HTML = new simple_html_dom;
$HTML->load($body);
$spans = $HTML->find('span');
foreach($spans as $span_tag) {
echo "working on ". $span_tag->class . " ... ";
echo "setting " . $span_tag->outertext . " equal to " . $span_tag->innertext . "<br/>\n";
$span_tag->outertext = (string)$span_tag->innertext;
}
$text = $HTML->save();
$HTML->clear();
unset($HTML);
echo "<br/>The Cleaned TEXT is: $text<br/>";
Ve burada benim tarayıcıda sonuç:
Peki neden ben sadece en dış yayılma kaldırıldı ile biten ediyorum nedir?
Edit
Bunu yapmak için kolay bir yolu var aslında, ben oyunu değilim. Nesne etiketlerini kaldırmak ancak diğer etiketler de dahil, içlerinde bir şey tutmak, yoksa ben sadece $ obj-> paintext kullanmak istiyorum için
Edit #2
Işin garibi ben hala Herkes önce bu koştu eğer gerçekten sorunu anlamak istiyorum rağmen Tamam ... görünüşe göre ben o çalışma var. Sadece dış yayılma çıkarmadan bilerek, bu yaptım:
function cleanSpansRecursive(&$body) {
$HTML = new simple_html_dom;
$HTML->load($body);
$spans = $HTML->find('span');
foreach($spans as $span_tag) {
$span_tag->outertext = (string)$span_tag->innertext;
}
$body = (string)$HTML;
if($HTML->find('span')) {
$HTML->clear();
unset($HTML);
cleanSpansRecursive($body);
} else {
$HTML->clear();
unset($HTML);
}
}
Ve o iş gibi görünüyor.