Wie kann ich Schlüsselwörter in HTML hervorheben und dabei Tags ignorieren?

Mary-Kate Olsen
Freigeben: 2024-11-12 22:40:02
Original
919 Leute haben es durchsucht

How to Highlight Keywords in HTML While Ignoring Tags?

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:

  1. Erstellen Sie ein DOMDocument-Objekt:Parsen Sie den HTML-Text in ein DOMDocument-Objekt mit LoadXML.
  2. Verwenden Sie DOMXPath für die Suche: Erstellen Sie ein DOMXPath-Objekt und verwenden Sie es, um nach Elementen abzufragen, die die Suche enthalten term.
  3. HTML-Tags in der Suche ignorieren: Verwenden Sie einen XPath-Ausdruck wie //*[contains(., "{$search}")]/*[FALSE = enthält(., "{$search}")]/.. um übergeordnete Elemente zu identifizieren, die den Suchtext enthalten, während HTML-Tags ausgeschlossen werden.
  4. Suchergebnisse verarbeiten: Extrahieren Sie die passende Textknoten und packen Sie sie in das gewünschte Tags dynamisch.
  5. Speichern Sie den geänderten HTML-Code:Speichern Sie das aktualisierte DOM-Dokument wieder in der HTML-Zeichenfolge.

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();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage