ホームページ > バックエンド開発 > PHPチュートリアル > 正規表現を使用して PHP テキスト内の URL を検出してリンクするにはどうすればよいですか?

正規表現を使用して PHP テキスト内の URL を検出してリンクするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-18 10:41:18
オリジナル
268 人が閲覧しました

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 アンカー タグを作成します。

正規表現とCallback

最後に、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート