テキスト URL の検出と置換から HTML タグを除外するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-28 04:53:30
オリジナル
196 人が閲覧しました

How to Exclude HTML Tags from Text URL Detection and Replacement?

テキスト 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|\;|\)|\]|\[|\{|\}|,|\&quot;|'|:|\<|$|\.\s)~i", '<a href=&quot;&quot;></a>', $text->data)
    );
    $text->parentNode->replaceChild($fragment, $text);
}
ログイン後にコピー

出力

このアプローチでは、HTML 内の対象となる URL を除外しながら、プレーン テキストの対象となる URL を HTML アンカー タグに効果的に変換します。タグ。結果として得られる HTML には、不要な変更を加えることなく、目的の変換が反映されます。

以上がテキスト URL の検出と置換から HTML タグを除外するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!