Maison > Article > développement back-end > Comment mettre en évidence des mots-clés en HTML tout en ignorant les balises ?
Comment ignorer les balises HTML dans preg_replace
Dans votre extrait de code, vous essayez d'utiliser preg_replace pour mettre en évidence les mots-clés recherchés dans le texte HTML. Cependant, cette approche peut entraîner une perturbation de la structure HTML lorsque le mot-clé correspond au contenu des balises HTML.
Au lieu d'utiliser des expressions régulières, il est recommandé d'exploiter XPath et DOMDocument pour cette tâche. Considérez l'approche suivante :
Exemple de code :
$str = '...'; // HTML String $search = 'text that span'; $doc = new DOMDocument; $doc->loadXML($str); $xp = new DOMXPath($doc); $anchor = $doc->getElementsByTagName('body')->item(0); if (!$anchor) { throw new Exception('Anchor element not found.'); } $r = $xp->query('//*[contains(., "'.$search.'")]/*[FALSE = contains(., "'.$search.'")]/..', $anchor); if (!$r) { throw new Exception('XPath failed.'); } foreach ($r as $i => $node) { $textNodes = $xp->query('.//child::text()', $node); $range = new TextRange($textNodes); while (FALSE !== $start = strpos($range, $search)) { $base = $range->split($start); $range = $base->split(strlen($search)); $ranges[] = $base; } foreach ($ranges as $range) { foreach ($range->getNodes() as $node) { $span = $doc->createElement('span'); $span->setAttribute('class', 'search_hightlight'); $node = $node->parentNode->replaceChild($span, $node); $span->appendChild($node); } } } echo $doc->saveXML();
Cette approche vous permet de mettre en évidence efficacement les termes de recherche tout en ignorant les balises HTML, préservant ainsi l'intégrité structurelle de votre HTML. contenu.
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!