Wie konvertiert man reine Text-URLs in anklickbare Links in HTML und behält dabei die URLs innerhalb der Tags bei?

Barbara Streisand
Freigeben: 2024-11-01 17:06:02
Original
285 Leute haben es durchsucht

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

URLs innerhalb von HTML-Tags beibehalten und gleichzeitig URLs ohne Tags konvertieren

In HTML-Dokumenten kann es wünschenswert sein, reine Text-URLs in anklickbare URLs umzuwandeln Links, während URLs ausgeschlossen werden, die bereits in HTML-Tags enthalten sind. Dies kann eine Herausforderung darstellen, da viele gängige Textersetzungsmethoden versehentlich auch getaggte URLs ins Visier nehmen.

Problembeschreibung

Der folgende HTML-Textausschnitt veranschaulicht das aufgetretene Problem:

<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:
Nach dem Login kopieren

$texts = $xPath->query(

'/html/body//text()[
    not(ancestor::a) and (
    contains(.,&quot;http://&quot;) or
    contains(.,&quot;https://&quot;) or
    contains(.,&quot;ftp://&quot;) )]'
Nach dem Login kopieren

);

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:
Nach dem Login kopieren

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);
Nach dem Login kopieren

}

Das obige ist der detaillierte Inhalt vonWie konvertiert man reine Text-URLs in anklickbare Links in HTML und behält dabei die URLs innerhalb der Tags bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!