2011-06-10 29 views
9

Sé cómo obtener el código fuente html a través de cUrl, pero quiero eliminar los comentarios en el documento html (me refiero a lo que está entre <!-- .. -->). Además, si puedo tomar solo el BODY del documento html. gracias.eliminar comentarios del código fuente html

+0

debe volver a analizarlos manualmente ... Tengo mi propia biblioteca de JavaScript para eso, pero no sé cómo podría implementar eso en PHP – metaforce

+0

no hay una opción de cUrl para esto? – Luis

+0

No lo creo así ... – metaforce

Respuesta

25

Trate PHP DOM*:

$html = '<html><body><!--a comment--><div>some content</div></body></html>'; // put your cURL result here 

$dom = new DOMDocument; 
$dom->loadHtml($html); 

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('//comment()') as $comment) { 
    $comment->parentNode->removeChild($comment); 
} 

$body = $xpath->query('//body')->item(0); 
$newHtml = $body instanceof DOMNode ? $dom->saveXml($body) : 'something failed'; 

var_dump($newHtml); 

Salida:

string(36) "<body><div>some content</div></body>" 
+0

Mira que está funcionando bien, nunca he hablado sobre DOM. gracias. – Luis

1

Si no hay opción para esto en rizo (y sospecho que no es, pero me he equivocado antes), entonces usted puede por lo menos analizar el HTML resultante al contenido de su corazón con un PHPDOMparser.

Probablemente esta sea su mejor apuesta a largo plazo en términos de capacidad de configuración y soporte.

+0

Correcto, no hay tal opción en el curl. Simplemente obtiene los datos cuando el servidor los envía. –

0

lo haría tubería a sed de una expresión regular, algo así como

curl http://yoururl.com/test.html | sed -i "s/<!\-\-\s?\w+\s?\-\->//g" | sed "s/.?(<body>.?</body>).?/\1/" 

Las expresiones regulares pueden no ser exactos, pero usted consigue la idea ...

Cuestiones relacionadas