11

タグ内のデータが保持されるように、PostgreSQL で HTML タグを削除するにはどうすればよいですか?

グーグルでいくつかの解決策を見つけましたが、タグ間のテキストもストライピングしていました!

4

6 に答える 6

9

選択肢は、不十分な正規表現に基づく弱いパーサーを使用してサーバー側で実行するか、堅牢なパーサーを使用してクライアント側で実行することに限定されません。堅牢なパーサーを使用してサーバー側に実装することもできます。

CPAN のHTML モジュールを利用する PL/PerlU の例を次に示します。

CREATE FUNCTION extract_contents_from_html(text) returns text AS $$
  use HTML::TreeBuilder;
  use HTML::FormatText;
  my $tree = HTML::TreeBuilder->new;
  $tree->parse_content(shift);
  my $formatter = HTML::FormatText->new(leftmargin=>0, rightmargin=>78);
  $text = $formatter->format($tree);
$$ LANGUAGE plperlu;

デモ:

select extract_contents_from_html('<html><body color="white">Hi there!<br>How are you?</body></html>') ;

出力:

     extract_contents_from_html
    ----------------------------
     やあ!
     元気ですか?

ただし、信頼できない言語に伴う警告に注意する必要があります。

于 2012-08-21T14:18:23.800 に答える
0
regexp_replace("Content",'\s*(<[^>]+>|<script.+?<\/script>|<style.+?<\/style>)\s*','','gi')

このコードは私にとってはうまく機能します。一般的な html タグを削除し、内部テキスト (一部のテキストなど) を保持し、スクリプトとスタイル ブロックを削除し、内部コードを削除します。

于 2021-07-01T08:04:39.067 に答える
-1

postgreSQL では実行しないでください。

これを行うようには設計されていません。

PHP または Web ページの提供に使用している任意の言語を使用します。

ただし、正規表現には注意してください。HTML は正規表現では記述できない複雑な言語です。

DOM パーサーを使用してタグを取り除きます。

正規表現を使用すると、安全でないものを何も残さないことが保証されますが、必要以上に簡単に取り除くことができます。または、不正な形式のタグが残る可能性があります。

于 2012-08-21T07:12:37.747 に答える