텍스트 URL 감지 및 교체에서 HTML 태그 제외
일반 텍스트 URL을 HTML 앵커 태그로 변환하고 HTML 내 태그 제외 태그, 현재 정규식에 문제가 발생했습니다. 이 문서는 이 문제에 대한 포괄적인 솔루션을 제공하는 것을 목표로 합니다.
현재 정규식 접근 방식은 텍스트의 URL을 효과적으로 감지하고 대체하지만 HTML 태그 내의 URL을 잘못 타겟팅하기도 합니다. 이 문제를 해결하려면 보다 타겟화된 접근 방식을 사용해야 합니다.
XPath를 사용하여 적합한 URL 식별
넓은 텍스트 검색 대신 XPath를 활용하여 정확하게 선택할 수 있습니다. 앵커 요소의 하위 항목이 아닌 URL을 포함하는 텍스트 노드. 이렇게 하면 HTML 태그 내의 URL이 영향을 받지 않습니다.
$xPath = new DOMXPath($dom); $texts = $xPath->query('/html/body//text()[not(ancestor::a) and (contains(., "http://") or contains(., "https://") or contains(., "ftp://"))]');
텍스트 노드를 문서 조각으로 바꾸기
텍스트 노드를 직접 수정하는 대신 document를 사용합니다. 전체 텍스트 노드를 원하는 HTML로 대체하는 조각입니다. 이 비표준 기술은 프로세스를 간소화합니다.
foreach ($texts as $text) { $fragment = $dom->createDocumentFragment(); $fragment->appendXML( preg_replace("~((?:http|https|ftp)://(?:\S*?\.\S*?))(?=\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)~i", '<a href=""></a>', $text->data) ); $text->parentNode->replaceChild($fragment, $text); }
출력
이 접근 방식은 HTML 내의 URL을 제외하면서 일반 텍스트의 적합한 URL을 HTML 앵커 태그로 효과적으로 변환합니다. 태그. 결과 HTML에는 원치 않는 수정 없이 원하는 변환이 반영됩니다.
위 내용은 텍스트 URL 감지 및 교체에서 HTML 태그를 제외하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!