【问题标题】:Perl HTML::Strip whitelistPerl HTML::Strip 白名单
【发布时间】:2011-11-12 03:47:09
【问题描述】:

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

现在标记如下

<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

但是我想得到下面的&lt;b&gt; 标签白名单输出。

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

【问题讨论】:

    标签: perl html-parsing perl-module


    【解决方案1】:

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

    虽然不是 100% 微不足道,但可以添加 - 代码已经检查标签名称中的“条带”标签,例如 &lt;script&gt;,并且只有 200LOC。


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


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

    【讨论】:

    • 谢谢。我使用了 HTML::StripScripts::Parser 解决方案。
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 2014-05-10
    • 2011-09-20
    • 2011-08-04
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多