Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Schlüsselwörter in HTML hervorheben und dabei Tags ignorieren?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 22:40:02916Durchsuche

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();

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!

Stellungnahme:
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