首頁 >後端開發 >php教程 >如何使用正規表示式檢測和連結 PHP 文字中的 URL?

如何使用正規表示式檢測和連結 PHP 文字中的 URL?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-18 10:41:18260瀏覽

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

偵測和連結文字中的 URL

處理使用者提供的文字時,通常需要識別和連結文字中嵌入的 URL 。以下是如何在PHP 中實現此目的:

使用正規表示式

要偵測URL,您可以使用下列正規表示式:

$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|$))&";

此正規表示式將會符合:

  • 可選協定(http://或https://)
  • 網域或 IP位址
  • 選用連接埠號碼
  • 選用路徑
  • 選用查詢字串
  • 選用片段識別碼

正在建立超連結

偵測到URL後,您可以使用以下回呼函數建立HTML 超連結:

function callback($match)
{
    $completeUrl = $match[1] ? $match[0] : "http://{$match[0]}";

    return '<a href="' . $completeUrl . '">'
        . $match[2] . $match[3] . $match[4] . '</a>';
}

如果未指定協議,此函數會在前面新增「http://」並使用偵測到的URL 作為href 屬性建立HTML錨標記。

應用正規表示式和回呼

最後,您可以使用preg_replace_callback 應用正規表示式並為所有偵測到的URL 建立超連結:

$text = "Here are some URLs: stackoverflow.com/questions/1188129/pregreplace-to-detect-html-php";

print preg_replace_callback($regex, 'callback', htmlspecialchars($text));

這將輸出偵測到的URL轉換為可點擊連結的文字.額外注意事項為了防止XSS 攻擊,請在使用正規表示式處理使用者提供的文字之前對其進行轉義。 提供的正規表示式不支援所有 URL 語法變體。您可能需要根據您的具體要求對其進行最佳化。 也可以使用類似的方法來偵測電子郵件地址並建立超連結。

以上是如何使用正規表示式檢測和連結 PHP 文字中的 URL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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