ホームページ >バックエンド開発 >PHPチュートリアル >テキスト URL の検出と置換から HTML タグを除外するにはどうすればよいですか?
テキスト URL の検出と置換から HTML タグを除外する
HTML 内の URL を除外して、プレーン テキスト URL を HTML アンカー タグに変換する探求タグを使用している場合、現在の正規表現では障害が発生しました。この記事は、この課題に対する包括的な解決策を提供することを目的としています。
現在の正規表現アプローチは、テキスト内の URL を効果的に検出して置換しますが、誤って HTML タグ内の URL をターゲットにすることもあります。これを修正するには、より的を絞ったアプローチを採用する必要があります。
XPath を使用して対象となる URL を特定する
広範囲のテキスト検索の代わりに、XPath を利用して正確に選択できます。アンカー要素の子孫ではない URL を含むテキスト ノード。これにより、HTML タグ内の URL は影響を受けなくなります。
$xPath = new DOMXPath($dom); $texts = $xPath->query('/html/body//text()[not(ancestor::a) and (contains(., "http://") or contains(., "https://") or contains(., "ftp://"))]');
テキスト ノードをドキュメント フラグメントで置き換える
テキスト ノードを直接変更するのではなく、ドキュメントを使用します。フラグメントを使用して、テキスト ノード全体を目的の HTML に置き換えます。この非標準的な手法により、プロセスが合理化されます。
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); }
出力
このアプローチでは、HTML 内の対象となる URL を除外しながら、プレーン テキストの対象となる URL を HTML アンカー タグに効果的に変換します。タグ。結果として得られる HTML には、不要な変更を加えることなく、目的の変換が反映されます。
以上がテキスト URL の検出と置換から HTML タグを除外するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。