2012-08-05 23 views
20

Ejecuto el código primero en MAMP y funcionó muy bien. Pero cuando intenté ejecutar el código en otro servidor, tengo un montón de advertencias como:Dom loadHTML no funciona correctamente en un servidor

Advertencia: DOMDocument :: loadHTML(): etiqueta de cierre inesperado: la cabeza en la Entidad, línea: 3349 en/cgihome /zhang1/html/cgi-bin/getPrice.php en la línea 17 Advertencia: DOMDocument :: loadHTML(): htmlParseStartTag: etiqueta fuera de lugar en Entidad, línea: 3350 en/cgihome/zhang1/html/cgi-bin/getPrice. pHP en línea 17 Advertencia: DOMDocument :: loadHTML(): cabecera etiqueta válida en Entidad, la línea: 3517 en /cgihome/zhang1/html/cgi-bin/getPrice.php en 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'); 
?> 

Cualquiera sabe lo que está pasando? ¡Gracias!

Respuesta

79

Para desactivar el aviso, puede utilizar

libxml_use_internal_errors(true); 

Esto funciona para mí. Manual

Antecedentes: 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 por defecto.

Con libxml_use_internal_errors puede controlar ese comportamiento. Configurarlo antes de cargar el documento:

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

Problema solucionado. ¡Muchas gracias! – LuZ

+0

Además, no se olvide de visitar la página del manual para una función que crea algunos errores en el futuro. A menudo encontrará notas útiles e información de uso allí. También hay comentarios de los usuarios. Ver ['DOMDocument :: loadHTML'] (http://de.php.net/DOMDocument.loadHTML) – hakre

+0

@ user1577801: Si esta respuesta resolvió su problema, considere la posibilidad de votar y aceptarla, haciendo clic en la marca verde grande debajo de la puntuación de la respuesta. –

0

Este problema se relaciona con no código xHTML

Como DomDocument() sólo puede procesar XHTML limpia que necesita para limpiar su código

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

Podría ser complicado, ya que es posible que necesite habilitar 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); 
1

Usted puede surpress la advertencia como esta:

@$doc->loadHTML($amazon); 
Cuestiones relacionadas