如何忽略preg_replace 中的HTML 標籤
在您的程式碼片段中,您嘗試使用preg_replace 突出顯示HTML 文字中突出顯示的關鍵HTML 文字中突出顯示字。但是,當關鍵字與 HTML 標籤中的內容相符時,此方法可能會導致 HTML 結構中斷。
建議使用 XPath 和 DOMDocument 來完成此任務,而不是使用正規表示式。請考慮以下方法:
程式碼範例:
$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();
這種方法可讓您有效地反白搜尋字詞,同時忽略HTML 標籤,從而保持HTML 內容的結構完整性。
以上是如何在 HTML 中反白關鍵字而忽略標籤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!