PHP DOMDocument :: loadHTML () : htmlParseEntityRef: sin nombre en Entity

Estoy tratando de obtener los elementos de “enlace” de ciertas páginas web. Sin embargo, no puedo entender lo que estoy haciendo mal. Me aparece el siguiente error:

Gravedad: advertencia

Mensaje: DOMDocument :: loadHTML () [domdocument.loadhtml]: htmlParseEntityRef: no name in Entity, línea: 536

Nombre de archivo: controllers / test.php

Número de línea: 34

La línea 34 es la siguiente en el código:

$dom->loadHTML($html); 

mi código:

  $url = "http://www.amazon.com/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); if($html = curl_exec($ch)){ // parse the html into a DOMDocument $dom = new DOMDocument(); $dom->recover = true; $dom->strictErrorChecking = false; $dom->loadHTML($html); $hrefs = $dom->getElementsByTagName('a'); echo "
"; print_r($hrefs); echo "

"; curl_close($ch); }else{ echo "The website could not be reached."; }

Significa que parte del código HTML no es válido. Esto es solo una advertencia, no un error. Tu script aún lo procesará. Para suprimir las advertencias establecidas

  libxml_use_internal_errors(true); 

O podrías suprimir completamente la advertencia haciendo

 @$dom->loadHTML($html); 

Esto puede ser causado por un pícaro & símbolo que es inmediatamente seguido por una etiqueta adecuada. De lo contrario, recibirías una falta ; error. Ver: Advertencia: DOMDocument :: loadHTML (): htmlParseEntityRef: expecting ‘;’ en Entidad,.

La solución es – reemplazar el & símbolo con &
o si debe tener eso & tal como está, entonces puede incluirlo en: - ]]>

El HTML está pobremente formado. Si se forma mal, cargar el HTML en el documento DOM puede incluso fallar. Si loadHTML no funciona, suprimir los errores no tiene sentido. Sugiero usar una herramienta como HTML Tidy para “limpiar” el HTML mal formado si no puede cargar el HTML en el DOM.

HTML Tidy se puede encontrar aquí http://www.htacg.org/tidy-html5/