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
Libérer: 2024-12-18 10:11:17
original
827 Les gens l'ont consulté

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal