Heim > Backend-Entwicklung > PHP-Tutorial > Wie konvertiere ich URLs in HTML-Text in Links, ohne dass sich dies auf URLs innerhalb von Tags auswirkt?

Wie konvertiere ich URLs in HTML-Text in Links, ohne dass sich dies auf URLs innerhalb von Tags auswirkt?

Linda Hamilton
Freigeben: 2024-10-29 07:26:02
Original
1077 Leute haben es durchsucht

 How to Convert URLs in HTML Text to Links without Affecting URLs within Tags?

URLs in HTML-Text in Links umwandeln, ohne die URLs in Tags zu beeinflussen

Ihre missliche Lage besteht darin, einen Weg zu finden, nur Text-URLs in zu konvertieren anklickbare Links innerhalb von HTML-Inhalten. Allerdings konvertiert das von Ihnen verwendete Muster derzeit unbeabsichtigt auch URLs innerhalb von Tags.

Ein präziser Ansatz unter Verwendung von DOM und XPath

Um dieses Problem zu beheben, Wir werden DOM (Document Object Model) und XPath verwenden. Insbesondere ermöglicht uns XPath, das HTML-Dokument zu durchlaufen und bestimmte Elemente anhand präziser Kriterien auszuwählen. In diesem Fall müssen wir Textknoten identifizieren, die URLs enthalten und keine Nachkommen von Ankerelementen () sind.

Die folgende XPath-Abfrage kann dies effektiv erreichen:

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

Diese Abfrage berücksichtigt nur Textknoten, die nicht zu Ankern gehören und mindestens eines der unterstützten URL-Protokolle enthalten.

Textknoten dynamisch transformieren

Sobald wir dies getan haben Wenn wir die relevanten Textknoten aufrufen, können wir deren Inhalt mit der PHP-Funktion PREG_REPLACE ändern. So können wir den Text durch entsprechende Ankertags ersetzen:

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

Dieser Code erstellt Dokumentfragmente, ändert den Text in jedem Fragment mithilfe des PREG_REPLACE-Musters und ersetzt dann die ursprünglichen Textknoten durch die geänderten Fragmente.

Mit diesem Ansatz können Sie Text-URLs effektiv in anklickbare Links umwandeln und gleichzeitig URLs innerhalb von Tags ausschließen, sodass Sie die gewünschte Funktionalität erhalten.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich URLs in HTML-Text in Links, ohne dass sich dies auf URLs innerhalb von Tags auswirkt?. 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