首頁  >  文章  >  後端開發  >  如何在 PHP 中實作 Stack Overflow 的自動連結功能?

如何在 PHP 中實作 Stack Overflow 的自動連結功能?

Linda Hamilton
Linda Hamilton原創
2024-11-04 11:35:02426瀏覽

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

模仿PHP 中Stack Overflow 的自動連結功能

Stack Overflow 的自動連結行為非常方便,讓使用者可以輕鬆連結到網站或貼文中的特定內容。本文探討如何在 PHP 中實現類似的功能,利用正規表示式模式來識別 URL 並將其轉換為 HTML 連結。

要了解內部運作原理,讓我們分解提供的程式碼:

<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>

分解正規表示式模式:

正規表示式模式初始化貪婪搜尋(?i) 並找出以下段落:

  • 協定: a-z :
  • 網域: wwwd{0,3}[.]|[a-z0-9. -] .{2,4}
  • 路徑: /(?:1 |((2 | ((3 )))) ) (?:((4 |((4 |((4 |((
  • 4

|(( 5

)))

)|

6

))

自訂回調函數:


回呼函數建構HTML 連結標記。它會提取 URL,對其進行解析,從網域中刪除前導“www”,根據需要限制顯示的 URL 文本,最後產生具有適當屬性的錨標記。

範例輸入和輸出:

為了說明函數的操作,請考慮以下輸入文字:

「這是我的文字。我想知道您是否知道如何在StackOverflow 上提問:查看https:// /www.php.cn/link/6e212075e04d1616b06a5e1398e10053


還有base_convert php函數? link/63c0d1be32c9c7e2dee3ac21690e490chttps:// www。 🎜>"這是我的文字,不知道你知不知道在StackOverflow問問題:看這是

stackoverflow.com/questions/1925455/…還有base_convert php函數? 還有base_convert php函數? 還有base_convert php函數? 還有base_convert php函數? php.net/manual/en/…

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

透過實作這些技術,開發人員可以輕鬆地將Stack Overflow 的自動連結功能合併到他們的PHP 應用程式中,從而增強使用者體驗並簡化作者和讀者的內容引用。 ()


    s()
  1. s()
  2. s()
  3. s`!()[]{};:'".,?«»"' '

以上是如何在 PHP 中實作 Stack Overflow 的自動連結功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn