Maison >développement back-end >tutoriel php >Comment enregistrer le HTML d'un document DOM sans perdre les éléments au niveau du bloc ?

Comment enregistrer le HTML d'un document DOM sans perdre les éléments au niveau du bloc ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-18 10:11:17830parcourir

How to Save HTML from a DOMDocument Without Losing Block-Level Elements?

Comment enregistrer le HTML d'un DOMDocument sans omettre les éléments de niveau bloc

Le problème survient lors de la tentative d'enregistrement du contenu d'un DOMDocument au format HTML sans inclure les wrappers de balises HTML, body et p par défaut. La solution suggérée consistant à utiliser saveXML($d->getElementsByTagName('p')->item(0)) ne fonctionne que lorsque le contenu manque d'éléments de niveau bloc.

Le problème avec le Approche originale

Dans les cas où des éléments de niveau bloc sont présents, tels que les balises h1, la sortie de saveXML est tronqué, ne laissant que le texte dans la balise p.

L'approche mise à jour

Pour résoudre ce problème, vous pouvez utiliser une version mise à jour de la fonction loadHTML introduite dans PHP 5.4 et Libxml 2.6. Cette fonction inclut un paramètre $options qui vous permet de spécifier comment le contenu doit être analysé. En définissant les options suivantes :

$html->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

Expliquer les options

  • LIBXML_HTML_NOIMPLIED désactive l'ajout automatique d'éléments html/body implicites.
  • LIBXML_HTML_NODEFDTD empêche l'ajout d'un doctype par défaut lorsqu'il n'en existe pas un trouvé.

Lorsque vous exécuterez ensuite saveHTML(), la sortie ne contiendra pas de doctype, de balise html ou de balise body. Cette approche garantit que les éléments au niveau du bloc sont conservés dans la sortie.

Remarque :

  • La documentation Libxml 2.6 indique que Libxml 2.6 est requis, mais LIBXML_HTML_NODEFDTD est uniquement disponible dans Libxml 2.7.8.
  • LIBXML_HTML_NOIMPLIED est disponible dans Libxml 2.7.7.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn