Strip HTML etiketleri ve içeriği

2 Cevap php

Ben dizeyi ayrıştırmak DOM kullanıyorum. Ben span etiketleri ve içeriklerini soyarak işlev gerekir. Örneğin, ben varsa:

This is some text that contains photo.
<span class='title'> photobyile</span>

Ben dönüş fonksiyonu istiyorum

This is some text that contains photo.

Bu denedim budur:

    $dom = new domDocument;
    $dom->loadHTML($string);
    $dom->preserveWhiteSpace = false;
    $spans = $dom->getElementsByTagName('span');

    foreach($spans as $span)
    {
    	$naslov = $span->nodeValue;	
    	echo $naslov;

    	$string = preg_replace("/$naslov/", " ", $string);
    }

I $span->nodeValue span etiketi ve tam değil etiketinin değerini döndürür farkında değilim, ama birlikte sınıf adıyla, bütün etiketi almak için nasıl bilmiyorum.

Thanks, Ile

2 Cevap

DOM ağacında doğrudan yayılma kaldırmayı deneyin.

$dom = new DOMDocument();
$dom->loadHTML($string);
$dom->preserveWhiteSpace = false;

$elements = $dom->getElementsByTagName('span');
while($span = $elements->item(0)) {       
   $span->parentNode->removeChild($span);
}

echo $dom->saveHTML();

@ Ile - Ben böyle bir sorun yaşadım - foreach yineleyici endeksi mutlu artan tutar çünkü removeChild (çağırarak ederken, var) DOM de DOMNodeList ($ açıklıklı) den düğümleri kaldırmak gibi görünüyor. Yani her kaldırdığınızda yayılma için, nodelist bir eleman küçülür ve daha sonra birer birer artırılır onun foreach sayacı alır. Net sonuç: o bir yayılma atlar.

Ben daha şık bir yolu vardır eminim, ama bu ben nasıl yaptım - Ben onlar removeChild () işlemi tarafından kaldırıldı olmaz, ikinci bir dizi için DOMNodeList gelen başvuruları taşındı.

    foreach($spans as $span) {
        $nodes[] = $span;
    }
    foreach($nodes as $span) {
        $span->parentNode->removeChild($span);
    }