tag parser node name leer php dom

php - parser - Dom loadHTML no funciona correctamente en un servidor



php dom get element by tag name (3)

Este problema está relacionado con el código no xHTML

Como DOMdocument () solo puede procesar XHTML limpio , necesitas limpiar tu código

Php tiene una extensión que hace el trabajo bastante bien. Llamado Tidy php.net/book.tidy

Puede ser complicado ya que puede necesitar habilitarlo en su php.ini

Entonces

$tidy_config = array( ''clean'' => true, ''output-xhtml'' => true, ''show-body-only'' => true, ''wrap'' => 0, ); $tidy = tidy_parse_string( $html, $tidy_config, ''UTF8''); $tidy->cleanRepair(); $doc = new DOMdocument(); $doc->loadHTML( (string) $tidy);

Primero ejecuté el código en MAMP y funcionó muy bien. Pero cuando intenté ejecutar el código en otro servidor, recibí muchas advertencias como:

Advertencia: DOMDocument :: loadHTML (): Etiqueta final inesperada: head en Entity, línea: 3349 en /cgihome/zhang1/html/cgi-bin/getPrice.php en la línea 17 Advertencia: DOMDocument :: loadHTML (): htmlParseStartTag: misplaced etiqueta en Entidad, línea: 3350 en /cgihome/zhang1/html/cgi-bin/getPrice.php en la línea 17 Advertencia: DOMDocument :: loadHTML (): Encabezado de etiqueta no válido en la Entidad, línea: 3517 en / cgihome / zhang1 / html /cgi-bin/getPrice.php en la línea 17

Los códigos son los siguientes:

<?php $amazon = file_get_contents(''http://www.amazon.com/blablabla''); $doc = new DOMdocument(); $doc->loadHTML($amazon); $doc->saveHTML(); $price = $doc -> getElementById(''actualPriceValue'')->textContent; $ASIN = $doc -> getElementById(''ASIN'')->getAttribute(''value''); ?>

Alguien sabe lo que está pasando? ¡Gracias!


Para deshabilitar la advertencia, puede utilizar

libxml_use_internal_errors(true);

Esto funciona para mí. Manual

Fondo: Usted está cargando HTML no válido. HTML no válido es bastante común, DOMDocument::loadHTML corrige la mayoría de los problemas, pero da advertencias de forma predeterminada.

Con Manual puedes controlar ese comportamiento. Configúralo antes de cargar el documento:

libxml_use_internal_errors(true); $doc->loadHTML($amazon);


Puedes suprimir la advertencia así:

@$doc->loadHTML($amazon);