URLs im Text erkennen und verknüpfen
Bei der Arbeit mit vom Benutzer bereitgestelltem Text ist es häufig erforderlich, im Text eingebettete URLs zu identifizieren und zu verknüpfen . So erreichen Sie dies in PHP:
Verwenden eines regulären Ausdrucks
Um URLs zu erkennen, können Sie den folgenden regulären Ausdruck verwenden:
$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]+?)?'; $regex = "&\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&";
Dieser reguläre Ausdruck passt zu:
Wird erstellt Hyperlinks
Sobald URLs erkannt wurden, können Sie die folgende Rückruffunktion verwenden, um HTML-Hyperlinks zu erstellen:
function callback($match) { $completeUrl = $match[1] ? $match[0] : "http://{$match[0]}"; return '<a href="' . $completeUrl . '">' . $match[2] . $match[3] . $match[4] . '</a>'; }
Diese Funktion stellt „http://“ voran, wenn kein Protokoll angegeben ist und erstellt ein HTML-Ankertag mit der erkannten URL als href-Attribut.
Anwenden der Regex und Rückruf
Schließlich können Sie preg_replace_callback verwenden, um den regulären Ausdruck anzuwenden und Hyperlinks für alle erkannten URLs zu erstellen:
$text = "Here are some URLs: stackoverflow.com/questions/1188129/pregreplace-to-detect-html-php"; print preg_replace_callback($regex, 'callback', htmlspecialchars($text));
Dadurch wird der Text mit erkannten URLs ausgegeben, die in anklickbare Links umgewandelt werden .
Zusätzlich Überlegungen
Das obige ist der detaillierte Inhalt vonWie kann ich URLs in PHP-Text mithilfe regulärer Ausdrücke erkennen und verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!