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|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)~i", '<a href=""></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!