web-dev-qa-db-fra.com

PHP DOMDocument :: loadHTML () [domdocument.loadhtml]: htmlParseEntityRef: aucun nom dans l'entité

J'essaie d'obtenir les éléments de "lien" de certaines pages Web. Je ne peux pas comprendre ce que je fais mal cependant. Je reçois l'erreur suivante:

Gravité: avertissement

Message: DOMDocument :: loadHTML () [domdocument.loadhtml]: HtmlParseEntityRef: aucun nom dans l'entité, ligne: 536

Nom de fichier: controllers/test.php

Numéro de ligne: 34

La ligne 34 est la suivante dans le code:

      $dom->loadHTML($html);

mon code:

            $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 "<pre>";
        print_r($hrefs);
        echo "</pre>";

        curl_close($ch);


    }else{
        echo "The website could not be reached.";
    }
12
David

Cela signifie qu'une partie du code HTML n'est pas valide. Ceci n'est qu'un avertissement, pas une erreur. Votre script va toujours le traiter. Pour supprimer les avertissements définis

 libxml_use_internal_errors(true);

Ou vous pouvez simplement supprimer complètement l'avertissement en faisant

@$dom->loadHTML($html);
35
Kris

Cela peut être dû à un symbole & non autorisé auquel est immédiatement associée une balise appropriée. Sinon, vous recevrez une erreur ; manquante. Voir: Avertissement: DOMDocument :: loadHTML (): htmlParseEntityRef: expecting ';' dans entité, .

La solution consiste à - remplacer le symbole & par &amp;
ou si vous devez avoir ce & tel quel, peut être vous pouvez le renfermer dans: <![CDATA[ - ]]>

12
Ujjwal Singh

Le HTML est mal formé. S'il est mal formé, le chargement du code HTML dans le document DOM peut même échouer. Si loadHTML ne fonctionne pas, il est inutile de supprimer les erreurs. Je suggère d'utiliser un outil tel que HTML Tidy pour "nettoyer" le code HTML mal formé si vous ne pouvez pas charger le code HTML dans le DOM.

Vous pouvez trouver HTML Tidy ici http://www.htacg.org/tidy-html5/

2
DeltaLee