Heim  >  Artikel  >  Backend-Entwicklung  >  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
Barbara StreisandOriginal
2024-10-28 04:53:30197Durchsuche

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://"))]');

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);
}

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!

Stellungnahme:
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