首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 正則實現文本中 URL、Email 自動轉換為超連結

     編輯:PHP 綜合知識

功能需求

在論壇、評論、文章內容等場景中,用戶輸入的純文本 URL、Email 地址需自動識別並轉換為可點擊的 HTML 超連結標籤。本文提供一個健壯的 PHP 函數實現此功能。

完整實作代碼

function text2links($str = '') {
    // 空字串或無特徵字元直接返回
    if ($str == '' || !preg_match('/(http|www\.|@)/i', $str)) {
        return $str;
    }
    
    $lines = explode("\n", $str);
    $new_text = '';
    
    while (list($k, $l) = each($lines)) {
        // 1. 補全協議頭:www. -> https://www.
        $l = preg_replace("/([ \t]|^)www\./i", "\\1https://www.", $l);
        
        // 2. 補全 FTP 協議
        $l = preg_replace("/([ \t]|^)ftp\./i", "\\1ftp://ftp.", $l);
        
        // 3. HTTP URL 轉連結
        $l = preg_replace(
            "/(http:\/\/[^ )\r\n!]+)/i",
            "\\1",
            $l
        );
        
        // 4. HTTPS URL 轉連結
        $l = preg_replace(
            "/(https:\/\/[^ )\r\n!]+)/i",
            "\\1",
            $l
        );
        
        // 5. FTP URL 轉連結
        $l = preg_replace(
            "/(ftp:\/\/[^ )\r\n!]+)/i",
            "\\1",
            $l
        );
        
        // 6. Email 地址轉 mailto 連結
        $l = preg_replace(
            "/([-a-z0-9_]+(\.[_a-z0-9-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)+))/i",
            "\\1",
            $l
        );
        
        $new_text .= $l . "\n";
    }
    
    return $new_text;
}

正則表達式解析

URL 匹配模式

/(http:\/\/[^ )\r\n!]+)/i
  • `http:\/\/` - 協議頭
  • `[^ )\r\n!]+` - 非空白、非右括號、非換行、非驚嘆號的字元(避免匹配到標點符號)
  • `i` - 不區分大小寫

Email 匹配模式

/([-a-z0-9_]+(\.[_a-z0-9-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)+))/i
  • `[-a-z0-9_]+` - 用戶名:字母、數字、底線、連字號、點
  • `@` - 必須包含 @
  • `([a-z0-9-]+(\.[a-z0-9-]+)+)` - 域名:至少一個點分隔的標籤

使用範例

$text = "請訪問 https://example.com 或 https://google.com
聯繫郵箱:admin@example.com
FTP 下載:ftp://files.example.com";

echo text2links($text);

輸出結果

請訪問 https://example.com 或 https://google.com
聯繫郵箱:admin@example.com
FTP 下載:ftp://files.example.com

擴展建議

  1. 安全過濾:輸出前對 URL 執行 `htmlspecialchars` 防 XSS
  2. 目標屬性:添加 `target="_blank" rel="noopener"` 在新分頁開啟
  3. 長度截斷:超長 URL 顯示省略號,title 保留完整地址
  4. 短網址支援:擴展正則支援 t.co、bit.ly 等短域名
  5. 中文域名:支援 IDN 國際化域名(需 Punycode 轉換)

改良版片段

// 安全版:添加 target="_blank" rel="noopener"
$l = preg_replace(
    "/(https?:\/\/[^ )\r\n!]+)/i",
    "\\1",
    $l
);

此函數已處理常見協議(http、https、ftp、mailto)與邊界情況,可直接整合至專案中使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved