ホームページ >バックエンド開発 >PHPチュートリアル >タグ内の URL に影響を与えずに、HTML テキスト内の URL をリンクに変換するにはどうすればよいですか?
あなたの苦境には、テキスト URL のみをリンクに変換する方法が必要です。 HTML コンテンツ内のクリック可能なリンク。ただし、現在使用しているパターンでは、タグ内の URL も意図せず変換されます。
この問題に対処するには、 DOM (ドキュメント オブジェクト モデル) と XPath を使用します。具体的には、XPath を使用すると、HTML ドキュメントを走査し、正確な基準に基づいて特定の要素を選択できます。この場合、URL を含み、アンカー () 要素の子孫ではないテキスト ノードを識別する必要があります。
次の XPath クエリはこれを効果的に実現できます:
/html/body//text()[ not(ancestor::a) and ( contains(., "http://") or contains(., "https://") or contains(., "ftp://") ) ]
このクエリでは、アンカーに属さず、サポートされている URL プロトコルの少なくとも 1 つを含むテキスト ノードのみが考慮されます。
foreach ($texts as $text) { $fragment = $dom->createDocumentFragment(); $fragment->appendXML( preg_replace( "~((?:http|https|ftp)://(?:\S*?\.\S*?))(?=\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|<|$|\.\s)~i", '<a href=""></a>', $text->data ) ); $text->parentNode->replaceChild($fragment, $text); }関連するテキスト ノードの場合、PHP の PREG_REPLACE 関数を使用してその内容を変更できます。テキストを対応するアンカー タグで置き換える方法は次のとおりです。
このコードはドキュメント フラグメントを作成し、PREG_REPLACE パターンを使用して各フラグメント内のテキストを変更し、元のテキスト ノードを変更されたフラグメントで置き換えます。
このアプローチに従うと、タグ内の URL を除外しながら、テキスト URL をクリック可能なリンクに効果的に変換でき、必要な機能を提供できます。以上がタグ内の URL に影響を与えずに、HTML テキスト内の URL をリンクに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。