4

htmlファイルから特定のタグとそのコンテンツを動的に削除したいのですが、preg_replaceを使用することを考えましたが、構文を正しく取得できません。基本的には、たとえば、次のようにする必要があります。 ""の間の(および含む)すべてを何も置き換えないでください。

誰かがこれについて私を助けてくれますか?

4

5 に答える 5

5

簡単な男。

Ungreedy regexprを使用するには、U修飾子を使用します。複数行にするには、s修飾子を使用します。それを知って、すべての段落を削除するには、次のパターンを使用します。

#<p[^>]*>(.*)?</p>#sU

説明 :

  • \文字を保護する必要がないように(より読みやすいパターンにするために)#区切り文字を使用します
  • <p[^>]*>:冒頭の段落を検出する部分(などの架空のスタイルで)
  • (.*)?:すべて(「貪欲でないモード」の場合)
  • </p>:明らかに、最後の段落

お役に立てば幸いです。

于 2009-10-15T14:03:40.073 に答える
2

正規表現でこれを実行しようとしないことをお勧めします。より安全なアプローチは、次のようなものを使用することです

シンプルなHTMLDOM

APIリファレンスへのリンクは次のとおりです。 シンプルなHTMLDOMAPIリファレンス

別のオプションは、DOMDocumentを使用することです

ここでの考え方は、実際のHTMLパーサーを使用してデータを解析し、ツリー内を移動/トラバースして、必要な要素/属性/テキストを削除することです。これは、正規表現を使用してHTML内のデータを置き換えようとするよりもはるかにクリーンなアプローチです。

<?php
    $doc = new DOMDocument;
    $doc->loadHTMLFile('blah.html');

    $content       = $doc->documentElement;
    $table         = $content->getElementsByTagName('table')->item(0);
    $delfirstTable = $content->removeChild($table);

    echo $doc->saveHTML();
?>
于 2009-10-15T11:37:11.117 に答える
2

データをサニタイズしようとしている場合は、特定の用語やタグをブラックリストに登録するのではなく、ホワイトリストを使用することをお勧めします。これにより、XSS攻撃のサニタイズと防止が容易になります。HTML Purifierと呼ばれるよく知られたライブラリがあります。これは、大きくてやや遅いですが、データの浄化に関して驚くべき結果をもたらします。

于 2009-10-15T11:44:36.250 に答える
2

タグの間に何があるかわからない場合、フィルの応答は機能しません。

これは、間に他のタグがない場合に機能し、間違いなく簡単なケースです。もちろん、divを必要なタグに置き換えることができます。

preg_replace('#<div>[^<]+</div>#','',$html);

中央に他のタグがある可能性がある場合、これは機能するはずですが、問題が発生する可能性があります。もしそうなら、あなたはおそらく上記のDOMソリューションを使用する方が良いでしょう

preg_replace('#<div>.+</div>#','',$html);

これらはテストされていません

于 2009-10-15T13:00:41.237 に答える
1

擬似コード

function replaceMe($html_you_want_to_replace,$html_dom) {
   return preg_replace(/^$html_you_want_to_replace/, '', $html_dom);
}

以前のHTML

<div>I'm Here</div><div>I'm next</div>

<?php
$html_dom = "<div>I'm Here</div><div>I'm next</div>";
$get_rid_of = "<div>I'm Here</div>";
replaceMe($get_rid_of);
?>

HTML後

<div>I'm next</div>

私はそれがハックの仕事であることを知っています

于 2009-10-15T12:55:39.420 に答える