2011-09-07 58 views
2

有没有办法将白名单提供给模块以保留某些标签?Perl HTML :: Strip白名单

现在标记如下

<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> 

回答

2

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

虽然不是100%微不足道的代码,但代码已经检查“strip”标签的标签名称,例如<script>,并且只有200LOC。


作为另一种方法,由O'Reilly正则表达式本书有一个正则表达式的食谱,可以去除的HTML标签(包括白名单能力)。


如果你不想惹正则表达式会,尝试HTML::StripScripts::Parser - 它似乎它使用白名单

+0

感谢。我使用了HTML :: StripScripts :: Parser解决方案。 – ckain