Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Menukar URL Teks Biasa kepada Pautan Boleh Klik dalam HTML Sambil Memelihara URL Dalam Teg?

Bagaimana untuk Menukar URL Teks Biasa kepada Pautan Boleh Klik dalam HTML Sambil Memelihara URL Dalam Teg?

Barbara Streisand
Lepaskan: 2024-11-01 17:06:02
asal
369 orang telah melayarinya

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

Memelihara URL Dalam Teg HTML sambil Menukar URL Tidak Teg

Dalam dokumen HTML, adalah wajar untuk menukar URL teks biasa kepada boleh diklik pautan sambil mengecualikan URL yang sudah terkandung dalam teg HTML. Ini boleh menimbulkan cabaran, kerana banyak kaedah penggantian teks biasa turut menyasarkan URL yang ditag secara tidak sengaja.

Pernyataan Masalah

Coretan teks HTML berikut menggambarkan isu yang dihadapi:

<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:
Salin selepas log masuk

$texts = $xPath->query(

'/html/body//text()[
    not(ancestor::a) and (
    contains(.,&quot;http://&quot;) or
    contains(.,&quot;https://&quot;) or
    contains(.,&quot;ftp://&quot;) )]'
Salin selepas log masuk

);

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:
Salin selepas log masuk

foreach ($teks sebagai $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);
Salin selepas log masuk

}

Atas ialah kandungan terperinci Bagaimana untuk Menukar URL Teks Biasa kepada Pautan Boleh Klik dalam HTML Sambil Memelihara URL Dalam Teg?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan