首頁 >後端開發 >php教程 >如何在 PHP 中偵測 URL 並將其轉換為 HTML 連結?

如何在 PHP 中偵測 URL 並將其轉換為 HTML 連結?

Barbara Streisand
Barbara Streisand原創
2024-12-19 05:15:22796瀏覽

How to Detect and Convert URLs to HTML Links in PHP?

偵測文字中的URL 並將其轉換為HTML 連結

在各種線上應用程式中,將文字中提到的URL 轉換為可點擊的連結是常見要求。讓我們探索如何在 PHP 中完成此任務。

要求

  1. 偵測有或沒有「http://」字首的 URL。
  2. 允許域、IP 位址和有效的頂層域 (TLD)。
  3. 辨識 URL在正常句子上下文中。
  4. 支援「https://」URL 和其他可能的 URL。
  5. 防止跨站腳本 (XSS) 漏洞。
  6. 支援電子郵件地址(可選)。

基於正規表示式的方法

讓我們建立一個符合的正規表示式有效的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]+?)?';

$rex = "&\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&";

實作

我們可以使用preg_match_all() 來尋找文本中的所有URL 匹配:

preg_match_all($rex, htmlspecialchars($text), $matches, PREG_OFFSET_CAPTURE);

轉換為HTML連結

我們將循環匹配並建立適當的 HTML 連結:
foreach ($matches[0] as $match) {
    $url = $match[0];
    $domain = $matches[2][0];
    $path = $matches[4][0];

    $completeUrl = $matches[1][0] ? $url : "http://$url";

    $htmlLink = "<a href='$completeUrl'>$domain$path</a>";

    $text = str_replace($url, $htmlLink, $text);
}

此方法可以有效處理大多數 URL 格式,同時保持針對 XSS 攻擊的安全性。

以上是如何在 PHP 中偵測 URL 並將其轉換為 HTML 連結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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