Perl HTML :: Белый список - PullRequest
       11

Perl HTML :: Белый список

2 голосов
/ 07 сентября 2011

Есть ли способ дать белый список модулю, чтобы он сохранил определенные теги?

Теперь разметка, как показано ниже

<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 Ответ

2 голосов
/ 07 сентября 2011

Считывая как Perl-оболочку, так и лежащий в ее основе код XS, возможности белого списка нет.

Можно добавить, хотя и не на 100% тривиально - код уже проверяет имена тегов на наличие тегов "strip", таких как <script> и только 200LOC.


В качестве другого подхода книга RegEx от O'Reilly имеет рецепт регулярного выражения, который может удалять теги HTML (включая возможность создания белого списка).


Если вы не хотите связываться с RegEx, попробуйте HTML::StripScripts::Parser - похоже, он использует белые списки

...