Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich URLs in PHP-Text mithilfe regulärer Ausdrücke erkennen und verknüpfen?

Wie kann ich URLs in PHP-Text mithilfe regulärer Ausdrücke erkennen und verknüpfen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-18 10:41:18316Durchsuche

How Can I Detect and Linkify URLs in PHP Text Using Regular Expressions?

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:

  • Optionales Protokoll (http:// oder https://)
  • Domänenname oder IP-Adresse
  • Optionale Portnummer
  • Optionaler Pfad
  • Optionale Abfragezeichenfolge
  • Optionales Fragment Bezeichner

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

  • Um XSS-Angriffe zu verhindern, maskieren Sie vom Benutzer bereitgestellten Text, bevor Sie ihn mit dem regulären Ausdruck verarbeiten.
  • Der bereitgestellte reguläre Ausdruck unterstützt nicht alle URL-Syntaxvarianten. Möglicherweise müssen Sie es entsprechend Ihren spezifischen Anforderungen verfeinern.
  • E-Mail-Adressen können mit einem ähnlichen Ansatz auch erkannt und mit Hyperlinks verknüpft werden.

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!

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