93 votes

Avertissement : DOMDocument::loadHTML() : htmlParseEntityRef : attente de ';' dans Entity,

$html = file_get_contents("http://www.somesite.com/");

$dom = new DOMDocument();
$dom->loadHTML($html);

echo $dom;

jette

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,
Catchable fatal error: Object of class DOMDocument could not be converted to string in test.php on line 10

161voto

Dewsworld Points 1442

Pour faire évaporer l'avertissement, vous pouvez utiliser libxml_use_internal_errors(true)

// create new DOMDocument
$document = new \DOMDocument('1.0', 'UTF-8');

// set error level
$internalErrors = libxml_use_internal_errors(true);

// load HTML
$document->loadHTML($html);

// Restore error level
libxml_use_internal_errors($internalErrors);

96voto

mattalxndr Points 2100

Je parierais que si vous regardez la source de http://www.somesite.com/ vous trouverez des caractères spéciaux qui n'ont pas été convertis en HTML. Peut-être quelque chose comme ça :

<a href="http://stackoverflow.com/script.php?foo=bar&hello=world">link</a>

Devrait être

<a href="http://stackoverflow.com/script.php?foo=bar&amp;hello=world">link</a>

4 votes

Pour aller plus loin, si le caractère & est même dans du texte et non dans un attribut HTML, il doit être échappé en &. La raison pour laquelle l'analyseur lance l'erreur est qu'après avoir vu un &, il attend un ; pour terminer l'entité HTML.

22 votes

...et pour aller plus loin, appelez htmlentities() ou similaire sur la corde règlera le problème.

57voto

Maanas Points 713
$dom->@loadHTML($html);

C'est incorrect, utilisez plutôt ceci :

@$dom->loadHTML($html);

27 votes

Ou $dom->strictErrorChecking = false ;

8 votes

C'est une solution terrible car vous ferez des erreurs sur cette ligne un cauchemar à déboguer. La solution de @Dewsworld est bien meilleure.

0 votes

Qu'est-ce que le @ pour ?

16voto

user279583 Points 75

Il y a 2 erreurs : la seconde est due au fait que $dom n'est pas une chaîne mais un objet et ne peut donc pas être "echoé". La première erreur est un avertissement de loadHTML, causé par une syntaxe invalide du document html à charger (probablement un fichier & (esperluette) utilisée comme séparateur de paramètres et non masquée comme entité avec &).

Vous ignorez et supprimez ce message d'erreur (pas l'erreur, juste le message !) en appelant la fonction avec l'opérateur de contrôle d'erreur "@" ( http://www.php.net/manual/en/language.operators.errorcontrol.php )

@$dom->loadHTML($html);

12voto

Mike B Points 18950

La raison de votre erreur fatale est DOMDocument ne possède pas de méthode __toString() et ne peut donc pas faire l'objet d'un écho.

Vous recherchez probablement

echo $dom->saveHTML();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X