preg_replace에서 HTML 태그를 무시하는 방법
코드 조각에서 preg_replace를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!