首頁 > 後端開發 > php教程 > 如何將純文字 URL 轉換為 HTML 中的可點擊鏈接,同時保留標籤內的 URL?

如何將純文字 URL 轉換為 HTML 中的可點擊鏈接,同時保留標籤內的 URL?

Barbara Streisand
發布: 2024-11-01 17:06:02
原創
368 人瀏覽過

How to Convert Plain Text URLs to Clickable Links in HTML While Preserving URLs Within Tags?

在轉換非標記URL 時保留HTML 標記中的URL

在HTML 文件中,可能需要將純文字URL 轉換為可點擊的URL鏈接,同時排除已包含在HTML 標記中的URL。這可能會帶來挑戰,因為許多常見的文字替換方法也會無意中定位標記的 URL。

問題陳述

以下HTML 文字片段說明了遇到的問題:

<code class="html"><p>I need you help here.</p>
<p>I want to turn this:</p>
<pre class="brush:php;toolbar:false">sometext sometext http://www.somedomain.com/index.html sometext sometext

into:

sometext sometext <a href=&quot;http://somedoamai.com/index.html&quot;>www.somedomain.com/index.html</a> sometext sometext

However, the existing regex solution also targets URLs within img tags:

sometext sometext <img src=&quot;http//domain.com/image.jpg&quot;> sometext sometext

Converting this accidentally produces:

sometext sometext <img src=&quot;<a href=&quot;http//domain.com/image.jpg&quot;>domain.com/image.jpg</a>&quot;> sometext sometext
**Solution** To effectively isolate and replace URLs that are not within HTML tags, we can leverage XPath and DOM manipulation. Using an XPath query, we can select text nodes containing URLs while excluding those that are descendants of anchor tags:
登入後複製

$texts = $xPath->query(

'/html/body//text()[
    not(ancestor::a) and (
    contains(.,&quot;http://&quot;) or
    contains(.,&quot;https://&quot;) or
    contains(.,&quot;ftp://&quot;) )]'
登入後複製

);

Once these text nodes are identified, we can replace them with document fragments containing the appropriate anchor elements. This ensures that the URLs are converted without affecting the surrounding HTML structure:
登入後複製

foreach ($texts as $text) {

$fragment = $dom->createDocumentFragment();
$fragment->appendXML(
    preg_replace(
        &quot;~((?:http|https|ftp)://(?:\S*?\.\S*?))(?=\s|\;|\)|\]|\[|\{|\}|,|\&quot;|'|:|\<|$|\.\s)~i&quot;,
        '<a href=&quot;&quot;></a>',
        $text->data
    )
);
$text->parentNode->replaceChild($fragment, $text);
登入後複製

}

以上是如何將純文字 URL 轉換為 HTML 中的可點擊鏈接,同時保留標籤內的 URL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板