Heim > Backend-Entwicklung > PHP-Tutorial > Wie schließe ich HTML-Tags von der Text-URL-Erkennung und -Ersetzung aus?

Wie schließe ich HTML-Tags von der Text-URL-Erkennung und -Ersetzung aus?

Barbara Streisand
Freigeben: 2024-10-28 04:53:30
Original
280 Leute haben es durchsucht

How to Exclude HTML Tags from Text URL Detection and Replacement?

HTML-Tags von der Text-URL-Erkennung und -Ersetzung ausschließen

In Ihrem Bestreben, reine Text-URLs in HTML-Anker-Tags umzuwandeln, mit Ausnahme derjenigen in HTML Tags haben Sie bei Ihrem aktuellen regulären Ausdruck eine Hürde festgestellt. Ziel dieses Artikels ist es, eine umfassende Lösung für diese Herausforderung bereitzustellen.

Ihr aktueller Regex-Ansatz erkennt und ersetzt effektiv URLs im Text, zielt jedoch fälschlicherweise auch auf URLs innerhalb von HTML-Tags ab. Um dies zu beheben, müssen wir einen gezielteren Ansatz verfolgen.

Verwendung von XPath zur Identifizierung geeigneter URLs

Anstelle einer breiten Textsuche können wir XPath zur präzisen Auswahl verwenden Textknoten, die URLs enthalten, die keine Nachkommen von Ankerelementen sind. Dadurch wird sichergestellt, dass URLs innerhalb von HTML-Tags nicht betroffen sind.

$xPath = new DOMXPath($dom);
$texts = $xPath->query('/html/body//text()[not(ancestor::a) and (contains(., "http://") or contains(., "https://") or contains(., "ftp://"))]');
Nach dem Login kopieren

Ersetzen von Textknoten durch Dokumentfragmente

Anstatt die Textknoten direkt zu ändern, verwenden wir document Fragmente, um den gesamten Textknoten durch den gewünschten HTML-Code zu ersetzen. Diese nicht standardmäßige Technik rationalisiert den Prozess.

foreach ($texts as $text) {
    $fragment = $dom->createDocumentFragment();
    $fragment->appendXML(
        preg_replace("~((?:http|https|ftp)://(?:\S*?\.\S*?))(?=\s|\;|\)|\]|\[|\{|\}|,|\&quot;|'|:|\<|$|\.\s)~i", '<a href=&quot;&quot;></a>', $text->data)
    );
    $text->parentNode->replaceChild($fragment, $text);
}
Nach dem Login kopieren

Ausgabe

Dieser Ansatz wandelt geeignete URLs im Klartext effektiv in HTML-Anker-Tags um und schließt diejenigen in HTML aus Tags. Der resultierende HTML-Code spiegelt die gewünschten Konvertierungen ohne unerwünschte Änderungen wider.

Das obige ist der detaillierte Inhalt vonWie schließe ich HTML-Tags von der Text-URL-Erkennung und -Ersetzung aus?. 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