ホームページ >バックエンド開発 >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);
}

このアプローチは、XSS 攻撃に対するセキュリティを維持しながら、ほとんどの URL 形式を効率的に処理します。

以上がPHP で URL を検出して HTML リンクに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。