URLs im Text erkennen und in HTML-Links konvertieren
In verschiedenen Online-Anwendungen ist die Konvertierung von im Text erwähnten URLs in anklickbare Links eine häufige Anforderung . Lassen Sie uns untersuchen, wie Sie dies in PHP erreichen können.
Anforderungen
Lösung
Basiert auf regulären Ausdrücken Ansatz
Lassen Sie uns einen regulären Ausdruck erstellen, der gültigen URLs und ihren Bestandteilen entspricht:
$rexProtocol = '(https?://)?'; $rexDomain = '((?:[-a-zA-Z0-9]{1,63}\.)+[-a-zA-Z0-9]{2,63}|(?:[0-9]{1,3}\.){3}[0-9]{1,3})'; $rexPort = '(:[0-9]{1,5})?'; $rexPath = '(/[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]*?)?'; $rexQuery = '(\?[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?'; $rexFragment = '(#[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?'; $rex = "&\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&";
Implementierung
Wir können preg_match_all verwenden (), um alle URL-Übereinstimmungen im zu finden Text:
preg_match_all($rex, htmlspecialchars($text), $matches, PREG_OFFSET_CAPTURE);
In HTML-Links konvertieren
Wir durchlaufen die Übereinstimmungen und erstellen die entsprechenden HTML-Links:
foreach ($matches[0] as $match) { $url = $match[0]; $domain = $matches[2][0]; $path = $matches[4][0]; $completeUrl = $matches[1][0] ? $url : "http://$url"; $htmlLink = "<a href='$completeUrl'>$domain$path</a>"; $text = str_replace($url, $htmlLink, $text); }
Dieser Ansatz verarbeitet die meisten URL-Formate effizient und gewährleistet gleichzeitig die Sicherheit gegen XSS-Angriffe.
Das obige ist der detaillierte Inhalt vonWie erkennt und konvertiert man URLs in HTML-Links in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!