>백엔드 개발 >PHP 튜토리얼 >태그 내의 URL에 영향을 주지 않고 HTML 텍스트의 URL을 링크로 변환하는 방법은 무엇입니까?

태그 내의 URL에 영향을 주지 않고 HTML 텍스트의 URL을 링크로 변환하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-29 07:26:021055검색

 How to Convert URLs in HTML Text to Links without Affecting URLs within Tags?

태그의 URL에 영향을 주지 않고 HTML 텍스트의 URL을 링크로 변환

귀하의 곤경은 텍스트 URL만 HTML로 변환하는 방법을 찾는 것입니다. HTML 콘텐츠 내의 클릭 가능한 링크. 그러나 현재 사용하고 있는 패턴은 의도치 않게 태그 내의 URL도 변환합니다.

DOM 및 XPath를 활용하는 정확한 접근 방식

이 문제를 해결하려면, 우리는 DOM(Document Object Model)과 XPath를 사용할 것입니다. 특히 XPath를 사용하면 HTML 문서를 탐색하고 정확한 기준에 따라 특정 요소를 선택할 수 있습니다. 이 경우 URL을 포함하고 앵커() 요소의 하위 항목이 아닌 텍스트 노드를 식별해야 합니다.

이를 효과적으로 달성할 수 있는 XPath 쿼리는 다음과 같습니다.

/html/body//text()[
    not(ancestor::a) and (
        contains(., "http://") or
        contains(., "https://") or
        contains(., "ftp://")
    )
]

이 쿼리는 앵커에 속하지 않고 지원되는 URL 프로토콜 중 하나 이상을 포함하는 텍스트 노드만 고려합니다.

동적으로 변환하는 텍스트 노드

관련 텍스트 노드의 내용을 수정하려면 PHP의 PREG_REPLACE 함수를 사용할 수 있습니다. 텍스트를 해당 앵커 태그로 바꾸는 방법은 다음과 같습니다.

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

이 코드는 문서 조각을 생성하고 PREG_REPLACE 패턴을 사용하여 각 조각의 텍스트를 수정한 다음 원본 텍스트 노드를 수정된 조각으로 바꿉니다.

이 접근 방식을 따르면 태그 내의 URL을 제외하면서 텍스트 URL을 클릭 가능한 링크로 효과적으로 변환하여 원하는 기능을 제공할 수 있습니다.

위 내용은 태그 내의 URL에 영향을 주지 않고 HTML 텍스트의 URL을 링크로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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