2010-02-13 28 views

risposta

61

Nessuno di questi è garantito per essere disponibile sul tuo server però.

+1

+1 per la grande risposta! –

+0

Non chiamerò in modo stupido l'uso di strumenti esterni –

+3

@YourCommonSense Penso che la parte importante sia * chiamare uno strumento ** attraverso system() ***. Menziona anche la libreria cURL e la chiama "il modo intelligente". –

5

Un modo:

$url = "http://www.brothersoft.com/publisher/xtracomponents.html"; 
$page = file_get_contents($url); 
$outfile = "xtracomponents.html"; 
file_put_contents($outfile, $page); 

Il codice di cui sopra è solo un esempio e privo di qualsiasi controllo e la gestione degli errori (!).

2

Come le altre risposte hanno detto, le funzioni di streaming PHP standard o cURL sono la soluzione migliore per che richiama il codice HTML. Per quanto riguarda la rimozione dei tag, ecco un paio avvicina:

Opzione # 1: Utilizzare l'estensione Tidy, se disponibile sul server, a piedi attraverso l'albero del documento in modo ricorsivo e restituire il testo dai nodi. Qualcosa di simile a questo:

function textFromHtml(TidyNode $node) { 
    if ($node->isText()) { 
     return $node->value; 
    } else if ($node->hasChildren()) { 
     $childText = ''; 
     foreach ($node->child as $child) 
      $childText .= textFromHtml($child); 
     return $childText; 
    } 
    return ''; 
} 

Si potrebbe desiderare qualcosa di più sofisticato di quello, per esempio, che sostituisce <br /> tag (dove $node->name == 'br') con a capo, ma questo farà per un inizio.

Quindi, caricare il testo dell'HTML in un oggetto Tidy e chiamare la funzione sul nodo del corpo. Se si dispone il contenuto in una stringa, utilizzare:

$tidy = new tidy(); 
$tidy->parseString($contents); 
$text = textFromHtml($tidy->body()); 

Opzione 2: utilizzare espressioni regolari per spogliano tutto tra < e >. Potresti (e probabilmente dovresti) sviluppare una regex più sofisticata che, ad esempio, corrisponda solo ai tag di inizio o fine HTML validi. Eventuali errori nella synax della pagina, come una parentesi angolare nel testo del corpo, potrebbero significare output spazzatura se non si presta attenzione. Questo è il motivo per cui Tidy è così bello (è specificamente progettato per ripulire le pagine non valide), ma potrebbe non essere disponibile.

0

Si consiglia vivamente di dare un'occhiata alla classe DOM SimpleHTML;

SimpleHTML DOM Parser at SourceForge

Con esso è possibile cercare l'albero DOM tramite selettori CSS come con la funzione $() di jQuery o prototypeJS $$() function.

Anche se funziona con file_get_contents() per ottenere il contenuto di una pagina web, è possibile passare solo HTML con un po 'di classe ricciolo di tuo (se si effettua il login, ecc)

Problemi correlati