귀하의 곤경은 텍스트 URL만 HTML로 변환하는 방법을 찾는 것입니다. HTML 콘텐츠 내의 클릭 가능한 링크. 그러나 현재 사용하고 있는 패턴은 의도치 않게 태그 내의 URL도 변환합니다.
이 문제를 해결하려면, 우리는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!