À partir d'un code HTML contenant des éléments <span>, remplacer tous les éléments <span> par des éléments <div> :
// Code HTML d'origine $content = <<< EOT <p>Paragraphe 1</p> <span>Ligne de texte 1</span> <p>Paragraphe 2</p> <span>Ligne de texte 2</span> <p>Paragraphe 3</p> <span>Ligne de texte 3</span> EOT; // Afficher le contenu HTML d'origine echo '<pre>'; echo htmlentities($content); echo '</pre>'; // Initialiser l'objet DOMDocument $dom = new \DOMDocument(); $dom->loadHTML($content); $dom->formatOutput = true; // Récupérer les éléments 'span' $spanTags = $dom->getElementsByTagName('span'); // Parcourir la liste d'éléments EN PARTANT DE LA FIN for($i = $spanTags->length; --$i >= 0; ) { $spanTag = $spanTags[$i]; // Créer un nouvel élément 'div' et lui donner le même contenu // que l'élément 'span' $div = $dom->createElement('div', $spanTag->nodeValue); // Depuis l'élément parent de l'élément 'span', remplacer // l'élément 'span' par le nouvel élément 'div' $spanTag->parentNode->replaceChild($div, $spanTag); } // Récupérer l'élément 'body' du document $body = $dom->getElementsByTagName('body')[0]; // Créer la nouvelle version du contenu en exportant l'HTML de // chaque élément enfant du 'body' $newContent = ''; foreach($body->childNodes as $child) { $newContent .= $dom->saveHTML($child); } // Afficher le contenu HTML transformé echo '<pre>'; echo htmlentities($newContent); echo '</pre>';
<p>Paragraphe 1</p> <span>Ligne de texte 1</span> <p>Paragraphe 2</p> <span>Ligne de texte 2</span> <p>Paragraphe 3</p> <span>Ligne de texte 3</span>