從文字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://"))]');
用文件片段取代文字節點
我們將使用文件而不是直接修改文字節點片段以將整個文字節點替換為所需的 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); }
輸出
這種方法有效地將純文字中符合條件的 URL 轉換為 HTML 錨標記,同時排除 HTML 中的 URL標籤。產生的 HTML 將反映所需的轉換,而不會進行任何不必要的修改。
以上是如何從文字 URL 偵測和替換中排除 HTML 標籤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!