Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die Auto-Link-Funktionalität von Stack Overflow in PHP implementieren?

Wie kann ich die Auto-Link-Funktionalität von Stack Overflow in PHP implementieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 11:35:02429Durchsuche

How Can I Implement Stack Overflow's Auto-Link Functionality in PHP?

Nachahmung der Auto-Link-Funktion von Stack Overflow in PHP

Das Auto-Link-Verhalten von Stack Overflow ist äußerst praktisch und ermöglicht es Benutzern, mühelos auf Websites zu verlinken oder spezifischer Inhalt innerhalb eines Beitrags. In diesem Artikel wird untersucht, wie Sie eine ähnliche Funktionalität in PHP implementieren und dabei ein Regex-Muster nutzen, um URLs zu identifizieren und in HTML-Links umzuwandeln.

Um das Innenleben zu verstehen, lassen Sie uns den bereitgestellten Code aufschlüsseln:

<code class="php">/**
 * Replace links in text with html links
 *
 * @param  string $text
 * @return string
 */
function auto_link_text($text)
{
    // a more readably-formatted version of the pattern is on http://daringfireball.net/2010/07/improved_regex_for_matching_urls
    $pattern = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))';

    $callback = create_function('$matches', '
        $url       = array_shift($matches);
        $url_parts = parse_url($url);

        $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
        $text = preg_replace("/^www./", "", $text);

        $last = -(strlen(strrchr($text, "/"))) + 1;
        if ($last < 0) {
            $text = substr($text, 0, $last) . "&amp;hellip;";
        }

        return sprintf(\'<a rel="nofollow" href="%s">%s</a>\', $url, $text);
    ');

    return preg_replace_callback($pattern, $callback, $text);
}</code>

Aufschlüsselung des Regex-Musters:

Das reguläre Ausdrucksmuster initialisiert eine gierige Suche (?i) und sucht nach den folgenden Segmenten:

  • Protokoll : a-z :
  • Domäne: wwwd{0,3}[.]|[a-z0-9.-] .{2,4}
  • Pfad: /(?:1 |((2 |((3 )))) ) (?:((4 |((5 ))))|6 ))

Benutzerdefinierte Rückruffunktion:

Die Rückruffunktion erstellt das HTML-Link-Markup. Es extrahiert die URL, analysiert sie, entfernt das führende „www“ aus der Domain, schränkt bei Bedarf den angezeigten URL-Text ein und generiert schließlich das Anker-Tag mit den entsprechenden Attributen.

Beispieleingabe und -ausgabe:

Um die Funktionsweise der Funktion zu veranschaulichen, betrachten Sie den folgenden Eingabetext:

"Dies ist mein Text. Ich frage mich, ob Sie sich mit dem Stellen von Fragen auf StackOverflow auskennen: Schauen Sie sich das an https:/ /www.php.cn/link/6e212075e04d1616b06a5e1398e10053

Auch base_convert php. Funktion?
https://www.php.cn/link/63c0d1be32c9c7e2dee3ac21690e490c

https ://www. php.cn/link/a995b410d5e76ed56523533b47e3786a"

Die Ausgabe nach der Verarbeitung durch die Funktion auto_link_text() lautet:

"Das ist mein Text. Ich frage mich, ob Sie wissen, wie man Fragen auf StackOverflow stellt: Überprüfen Sie Dies ist stackoverflow.com/questions/1925455/…

Auch die PHP-Funktion base_convert?
pt.php.net/manual/en/…

pt.php.net/manual/en/…"

Durch die Implementierung dieser Techniken können Entwickler die automatische Verknüpfungsfunktion von Stack Overflow mühelos in ihre PHP-Anwendungen integrieren und so die Benutzererfahrung verbessern und Vereinfachung der Inhaltsreferenzierung durch Autoren und Leser.


  1. s()<>
  2. s()< >
  3. s()<>
  4. s()<> 🎜>
  5. s()<>
  6. s`!()[]{};:'".,<>?" '

Das obige ist der detaillierte Inhalt vonWie kann ich die Auto-Link-Funktionalität von Stack Overflow in PHP implementieren?. 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