>백엔드 개발 >PHP 튜토리얼 >텍스트 URL 감지 및 교체에서 HTML 태그를 제외하는 방법은 무엇입니까?

텍스트 URL 감지 및 교체에서 HTML 태그를 제외하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-28 04:53:30270검색

How to Exclude HTML Tags from Text URL Detection and Replacement?

텍스트 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|\;|\)|\]|\[|\{|\}|,|\&quot;|'|:|\<|$|\.\s)~i", '<a href=&quot;&quot;></a>', $text->data)
    );
    $text->parentNode->replaceChild($fragment, $text);
}

출력

이 접근 방식은 HTML 내의 URL을 제외하면서 일반 텍스트의 적합한 URL을 HTML 앵커 태그로 효과적으로 변환합니다. 태그. 결과 HTML에는 원치 않는 수정 없이 원하는 변환이 반영됩니다.

위 내용은 텍스트 URL 감지 및 교체에서 HTML 태그를 제외하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.