您的困境涉及找到一種方法,僅將文字URL 轉換為連結HTML 內容中的可點擊連結。然而,目前,您使用的模式也會無意中轉換標籤內的 URL。
要解決此問題,我們將使用 DOM(文檔物件模型)和 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,從而為您提供所需的功能。
以上是如何將 HTML 文字中的 URL 轉換為連結而不影響標籤內的 URL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!