Perl HTML :: Strip白名单

时间:2011-09-07 13:05:07

标签: perl html-parsing perl-module

有没有办法为模块提供白名单以保留某些标签?

现在标记如下

<div><b>test</b></div>

使用此代码删除

my $hs = HTML::Strip->new();

open FILE, "<test.markup";
$raw_html=<FILE>;
my $clean_text = $hs->parse( $raw_html );
$hs->eof;

生成

以下的输出
test

但是,我想在下面添加<b>标记白名单输出。

<b>test</b>

编辑,一个解决方案

使用HTML::StripScripts::Parser

my $hss = HTML::StripScripts::Parser->new(
     {
         Context => 'Inline',
         EscapeFiltered  => 0,
         BanAllBut       => [qw(i b u)],
     },
     strict_comment => 0,
     strict_names   => 0,
);

$hss->filter_html("<div><b>test</b></div>");
$cooked = $hss->filtered_document;
$cooked =~ s/<!--filtered-->//g;
print $cooked; // <b>test</b>

1 个答案:

答案 0 :(得分:2)

读取Perl包装器和底层XS代码,没有白名单功能。

可以添加,但不是100%微不足道 - 代码已经检查了诸如<script>之类的“strip”标签的标签名称,并且只有200LOC。


作为另一种方法,来自O'Reilly的RegEx书籍有一个正则表达式配方,可以去除HTML标签(包括白名单功能)。


如果您不想使用RegEx,请尝试HTML::StripScripts::Parser - 它似乎使用白名单