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.";
}
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);
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 &
ou si vous devez avoir ce &
tel quel, peut être vous pouvez le renfermer dans: <![CDATA[
- ]]>
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/