Kesukaran anda melibatkan mencari cara untuk menukar URL teks sahaja menjadi pautan boleh klik dalam kandungan HTML. Walau bagaimanapun, pada masa ini, corak yang anda gunakan secara tidak sengaja menukar URL dalam teg juga.
Untuk menangani isu ini, kami akan menggunakan DOM (Model Objek Dokumen) dan XPath. Secara khusus, XPath membolehkan kami melintasi dokumen HTML dan memilih elemen tertentu berdasarkan kriteria yang tepat. Dalam kes ini, kita perlu mengenal pasti nod teks yang mengandungi URL dan bukan turunan elemen anchor ().
Pertanyaan XPath berikut boleh mencapai ini dengan berkesan:
/html/body//text()[ not(ancestor::a) and ( contains(., "http://") or contains(., "https://") or contains(., "ftp://") ) ]
Pertanyaan ini hanya mempertimbangkan nod teks yang bukan milik sauh dan mengandungi sekurang-kurangnya satu daripada protokol URL yang disokong.
Setelah kami mempunyai nod teks yang berkaitan, kita boleh menggunakan fungsi PREG_REPLACE PHP untuk mengubah suai kandungannya. Begini cara kita boleh menggantikan teks dengan tag sauh yang sepadan:
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); }
Kod ini mencipta serpihan dokumen, mengubah suai teks dalam setiap serpihan menggunakan corak PREG_REPLACE dan kemudian menggantikan nod teks asal dengan serpihan yang diubah suai.
Dengan mengikut pendekatan ini, anda boleh menukar URL teks dengan berkesan kepada pautan boleh klik sambil mengecualikan URL dalam teg, memberikan anda kefungsian yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Menukar URL dalam Teks HTML kepada Pautan tanpa Menjejaskan URL dalam Teg?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!