3 votes

DOMDocument::loadHTML() s'attend à ce que le paramètre 2 soit long, chaîne de caractères donnée lors de l'utilisation du paramètre LIBXML_HTML_NOIMPLIED.

Actuellement, lorsque j'utilise l'objet DOMDocument et que j'appelle saveHTML(), il ajoute automatiquement certaines balises html que je ne veux pas. J'ai essayé la solution proposée ici( https://stackoverflow.com/a/31426408/3659230 ) et quand je le fais, j'obtiens cette erreur :

DOMDocument::loadHTML() attend du paramètre 2 qu'il soit long, la chaîne de caractères est donnée

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);

Cela semble assez simple mais je n'arrive pas à le faire fonctionner. J'utilise la version 5.5.3 de PHP.

2voto

lonesomeday Points 95456

En LIBXML_HTML_NOIMPLIED y LIBXML_HTML_NODEFDTD ne sont définis qu'à partir de PHP 5.4.

Si une constante n'est pas définie, PHP la traite (de manière idiote) comme une chaîne de caractères. Donc, en PHP 5.3 et plus, votre code est en fait

$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), 'LIBXML_HTML_NOIMPLIED'|'LIBXML_HTML_NODEFDTD');

ou, une fois que l'opérateur binaire a été exécuté :

$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), 'LIBXML_HTML_NOMMVL]ED');

Ce qui n'est évidemment pas votre intention ! Votre meilleure option, si possible, est de passer à une version plus récente de PHP.

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