HTML タグを無視して HTML コンテンツの検索と置換を実行するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-16 16:42:03
オリジナル
951 人が閲覧しました

How to Perform Search and Replace on HTML Content While Ignoring HTML Tags?

preg_replace での HTML タグの無視

preg_replace を使用して HTML を含む文字列の検索および置換操作を実行する場合、多くの場合、HTML タグを無視し、変更のみを行うことが望ましいです。実際のテキストの内容。ただし、正規表現は HTML の解析には適していないため、これを単独で使用するのは困難な場合があります。

別のアプローチの 1 つは、DOMDocument と DOMXPath を利用して HTML 構造を処理することです。 XPath クエリを活用すると、HTML ドキュメント内で検索条件に一致するテキスト ノードを見つけ、残りの HTML タグに影響を与えることなく、それらのノードを目的の HTML 要素でラップすることができます。

たとえば、 HTML タグの干渉を回避する次のコード スニペットを検討してください:

$str = '...'; // HTML document

$search = 'text to highlight';

$doc = new DOMDocument;
$doc->loadXML($str);
$xp = new DOMXPath($doc);

$anchor = $doc->getElementsByTagName('body')->item(0);
if (!$anchor) {
    throw new Exception('Anchor element not found.');
}

// XPath query to locate text nodes containing the search text
$r = $xp->query('//*[contains(., "'.$search.'")]/*[FALSE = contains(., "'.$search.'")]/..', $anchor);
if (!$r) {
    throw new Exception('XPath failed.');
}

// Process search results
foreach($r as $i => $node) {
    $textNodes = $xp->query('.//child::text()', $node);
    $range = new TextRange($textNodes);

    // Identify matching text node ranges
    $ranges = array();
    while (FALSE !== $start = $range->indexOf($search)) {
        $base = $range->split($start);
        $range = $base->split(strlen($search));
        $ranges[] = $base;
    }

    // Wrap matching text nodes with HTML elements
    foreach($ranges as $range) {
        foreach($range->getNodes() as $node) {
            $span = $doc->createElement('span');
            $span->setAttribute('class', 'search_highlight');
            $node = $node->parentNode->replaceChild($span, $node);
            $span->appendChild($node);
        }
    }
}

echo $doc->saveHTML();
ログイン後にコピー

このコードは XPath クエリを利用して、検索を含むテキスト ノードを見つけます。 term を作成し、テキスト ノード内のサブ範囲を管理する TextRange クラスを作成します。一致する各範囲はカスタム クラスを使用してspan要素内にラップされ、強調表示やその他の目的に使用できます。

このアプローチでは、正規表現のみに依存するのではなく、DOMDocument と DOMXPath を採用することで、より効率的な処理が提供されます。 HTML コンテンツに対して検索および置換操作を実行するときに HTML タグを無視する信頼性の高い方法です。

以上がHTML タグを無視して HTML コンテンツの検索と置換を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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