タグ内のデータが保持されるように、PostgreSQL で HTML タグを削除するにはどうすればよいですか?
グーグルでいくつかの解決策を見つけましたが、タグ間のテキストもストライピングしていました!
タグ内のデータが保持されるように、PostgreSQL で HTML タグを削除するにはどうすればよいですか?
グーグルでいくつかの解決策を見つけましたが、タグ間のテキストもストライピングしていました!
選択肢は、不十分な正規表現に基づく弱いパーサーを使用してサーバー側で実行するか、堅牢なパーサーを使用してクライアント側で実行することに限定されません。堅牢なパーサーを使用してサーバー側に実装することもできます。
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 ---------------------------- やあ! 元気ですか?
ただし、信頼できない言語に伴う警告に注意する必要があります。
regexp_replace("Content",'\s*(<[^>]+>|<script.+?<\/script>|<style.+?<\/style>)\s*','','gi')
このコードは私にとってはうまく機能します。一般的な html タグを削除し、内部テキスト (一部のテキストなど) を保持し、スクリプトとスタイル ブロックを削除し、内部コードを削除します。
postgreSQL では実行しないでください。
これを行うようには設計されていません。
PHP または Web ページの提供に使用している任意の言語を使用します。
ただし、正規表現には注意してください。HTML は正規表現では記述できない複雑な言語です。
DOM パーサーを使用してタグを取り除きます。
正規表現を使用すると、安全でないものを何も残さないことが保証されますが、必要以上に簡単に取り除くことができます。または、不正な形式のタグが残る可能性があります。