Heim > Artikel > Backend-Entwicklung > Wie kann ich Schlüsselwörter in HTML hervorheben und dabei Tags ignorieren?
So ignorieren Sie HTML-Tags in preg_replace
In Ihrem Code-Snippet versuchen Sie, preg_replace zu verwenden, um gesuchte Schlüsselwörter im HTML-Text hervorzuheben. Dieser Ansatz kann jedoch zu einer Störung der HTML-Struktur führen, wenn das Schlüsselwort mit Inhalten in HTML-Tags übereinstimmt.
Anstelle der Verwendung regulärer Ausdrücke wird empfohlen, für diese Aufgabe XPath und DOMDocument zu nutzen. Betrachten Sie den folgenden Ansatz:
Codebeispiel:
$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();
Dieser Ansatz ermöglicht es Ihnen, Suchbegriffe effektiv hervorzuheben und gleichzeitig HTML-Tags zu ignorieren und so die strukturelle Integrität Ihres HTML zu bewahren Inhalt.
Das obige ist der detaillierte Inhalt vonWie kann ich Schlüsselwörter in HTML hervorheben und dabei Tags ignorieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!