2012-11-19 5 views
6

Eventuali duplicati:
How to parse and process HTML with PHP?PHP tag HTML parse

Sono abbastanza nuovo per PHP. Ho il testo di un tag body di qualche pagina in una variabile stringa. Mi piacerebbe sapere se contiene qualche tag ... dove viene dato il tag tag1, e in tal caso, prendi solo quel tag dalla stringa. Come posso farlo semplicemente in PHP?

Grazie !!

+0

Ci sono diversi modi per affrontarlo e dipendono tutti da cosa esattamente si vuole fare. Hai bisogno di * analizzare * HTML? Usa un parser HTML. Vuoi rimuovere i tag e la sintassi è nota per essere entro certi limiti? Usa 'strip_tags()'. Vuoi mettere in blacklist determinati tag in HTML arbitrario? Forse meglio pensare a * whitelisting * i tag permessi invece? Usa una libreria come HTML Purifier. – deceze

+0

@Troy Se il mio assistente ha aiutato, accettalo, così che altri possano apprenderlo. Se no, come posso aiutarti ulteriormente? – RTB

+0

grazie !! per favore vedi il mio commento sotto –

risposta

11

si sarebbe guardando a qualcosa di simile:

<?php 
$content = ""; 
$doc = new DOMDocument(); 
$doc->load("example.html"); 
$items = $doc->getElementsByTagName('tag1'); 
if(count($items) > 0) //Only if tag1 items are found 
{ 
    foreach ($items as $tag1) 
    { 
     // Do something with $tag1->nodeValue and save your modifications 
     $content .= $tag1->nodeValue; 
    } 
} 
else 
{ 
    $content = $doc->saveHTML(); 
} 
echo $content; 
?> 

DomDocument rappresenta un intero documento HTML o XML; funge da radice dell'albero del documento. Quindi avrai un markup valido e trovando gli elementi per nome tag non troverai commenti.

+0

Questo è proprio quello che stavo cercando. –

+0

grazie !! per favore vedi il mio commento sotto –

0

modo veloce:

Cercare la posizione di indice tag1 quindi cercare la posizione di indice/tag1. Quindi tagliare la stringa tra questi due indici. Cerca strpos e substr su php.net Anche questo potrebbe non funzionare se la tua stringa è troppo lunga.

$pos1 = strpos($bigString, '<tag1>'); 
$pos2 = strpos($bigString, '</tag1>'); 
$resultingString = substr($bigString, -$pos1, $pos2); 

Potrebbe essere necessario aggiungere e/o sottrarre alcune unità da $ pos1 e $ pos2 per ottenere il giusto $ resultingString. (se non si dispone di commenti con tag1 dentro di loro sospiro)

Il modo giusto:

Look up parser HTML

+0

E come cerchi le posizioni dei tag? Tieni presente che questo è HTML valido: '

+0

grazie !! per favore vedi il mio commento qui sotto –