SimpleHTML ile iç içe etiketler Çıkarma

1 Cevap php

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.

1 Cevap

I $span_tag->outertext yaratacak simple_html_dom bu yüzden test edemez benim makine veya dev sunucu üzerinde yüklü, ancak bunun görünüyor itibaren, ayar yok yeni {[(2)] } dış yayılma içindeki nesneleri, yani eski başvurular artık $HTML var olacaktır. Referanslar sağlam tutulması, çünkü içteki gelen dış gidiyor bunu düzeltmek gerekir.

EDIT: ikinci düzenleme olarak, yeni oluşturulan yayılan çalıştığını yüzden bir yedek, yapmak her zaman buluyorlar.