ホームページ >バックエンド開発 >PHPチュートリアル >PHP で URL を検出して HTML リンクに変換する方法
テキスト内の URL を検出して HTML リンクに変換する
さまざまなオンライン アプリケーションでは、テキスト内で言及されている 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]+?)?'; $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 サイトの他の関連記事を参照してください。