Pour masquer les avertissements, vous devez donner des instructions spéciales pour libxml
qui est utilisé en interne pour effectuer l'analyse syntaxique:
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
Le libxml_use_internal_errors(true)
indique que vous allez gérer les erreurs et les avertissements vous et vous Je ne veux pas qu'ils gâchent la sortie de votre script.
Ce n'est pas la même chose que l'opérateur @
. Les avertissements sont collectés dans les coulisses et ensuite vous pouvez les récupérer en utilisant libxml_get_errors()
dans le cas où vous souhaitez effectuer une journalisation ou retourner la liste des problèmes à l'appelant.
Que vous utilisiez ou non les avertissements collectés, vous devez toujours effacer la file d'attente en appelant le libxml_clear_errors()
.
Préserver l'état
Si vous avez autre code qui utilise libxml
il peut être utile de vous assurer que votre code ne modifie pas l'état global de la gestion des erreurs; pour cela, vous pouvez utiliser la valeur de retour de libxml_use_internal_errors()
pour enregistrer l'état précédent.
// modify state
$libxml_previous_state = libxml_use_internal_errors(true);
// parse
$dom->loadHTML($html);
// handle errors
libxml_clear_errors();
// restore
libxml_use_internal_errors($libxml_previous_state);
Essayez cette solution - semble être beaucoup plus facile - http://stackoverflow.com/questions/6090667/php-domdocument-errors-warnings-on-html5-tags – Marcin
Conversion entrée moche à la sortie proprement dit est ce paye les factures;) L'option [recover est dans le manuel] (http://nl1.php.net/manual/en/class.domdocument.php#domdocument.props.recover). c'est juste un booléen. Vous pouvez simplement appeler '$ dom-> saveHTML()' pour voir de quelle sorte le document libxml essaye de faire de votre entrée '$ html', habituellement c'est assez proche/ok. – Wrikken