2009-07-11 14 views
6

Mam div id jak usunąć z wyjściem który wygląda jakJak mogę usunąć element HTML i jego zawartość przy użyciu regex

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div> 

Jak mogę usunąć ten div i wszystko w nim za pomocą PHP i regex ?

Dziękuję.

+0

Czy możesz dalej się rozwijać? Czy to jest w formie ciągu? –

+1

znasz nazwisko i/lub nazwę klasy? Czy są jakieś wyraźne identyfikatory identyfikatora i/lub klasy, aby nie usunąć wszystkich elementów div należących do tego opisu? Czy chcesz usunąć wszystkie elementy div i ich zawartość? –

Odpowiedz

13

Prosta odpowiedź brzmi, że nie. Zamiast tego używasz jednego z wielu parserów HTML PHP. Regeksy są płatkowym i podatnym na błędy sposobem manipulowania HTML.

Biorąc to pod uwagę można to zrobić:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html); 

Ale wiele rzeczy może źle się z tym. Na przykład, jeśli zawiera div:

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div> 

Skończysz z:

other elements etc..) </div> 

jak regex zatrzyma się na pierwszej </div>. I nie ma niczego, co naprawdę można zrobić, aby rozwiązać ten problem (z użyciem wyrażeń regularnych) konsekwentnie.

Sporządzono z parsera wygląda bardziej jak to:

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$element = $doc->getElementById('ithis'); 
$element->parentNode->removeChild($element); 
$html = $doc->saveHTML(); 
+0

+1. Warto skomentować, że (A) Jeśli element nie istnieje, to '$ element' to' NULL', a komenda '-> removeChild()' zawiedzie z błędem krytycznym i (B) możesz/może chcieć użyć '' ', aby spowodować, że' -> loadHTML() 'uciszy wszelkie uwagi na temat zniekształconego HTML:' @ $ doc-> loadHTML ($ html); ' –

1

nie wiem o PHP, ale można zastąpić /<id.*?<\/id[^>]*>/ z niczym.

0

PHP jest po stronie serwera, a dane wyjściowe pochodzą z serwera. Nie możesz tego po prostu wypuścić? A może próbujesz to ukryć? Jeśli tak, w arkuszu stylów, po prostu powiedz #ithis {display:none}.

Jeśli ciąg znaków jest zwrotem z jakiejś funkcji w PHP, której nie napisałeś ORAZ nie chcesz z tego kodu wymieszać, musisz napisać bardzo trudne wyrażenie, aby uwzględnić zagnieżdżone div, zmienną składnię w dane wyjściowe itp. Zalecam użycie parsera (być może tego Zend Framework component), aby ci pomóc. Używałem go kilka razy na coś podobnego. Chociaż jeśli nie znasz w ogóle ZF, możesz spróbować czegoś innego.

Powiązane problemy