html - 在 HTML::TagFilter 中需要帮助,摆脱样式标签内容

标签 html perl

我有一个用 perl 编写的过滤器,看起来像这样

my $tf = HTML::TagFilter->new(
            allow => {
                img => { src => [] },
                b   => { all => [] },
                i   => { all => [] },
                em  => { all => [] },
                u   => { all => [] },
                s   => { all => [] },
            },
            strip_comments      => 1,
            skip_xss_protection => 1,
        );

现在当我像这样传递 html 时

<html>
<head>
<style><!--
..hmmessage P
{
margin:0px=3B
padding:0px
}
body.hmmessage
{
font-size: 12pt=3B
font-family:Calibri
}
--></style></head>
<body class=3D'hmmessage'><div dir=3D'ltr'>Message content here! =
</div></body>
</html>

输出是

<!--..hmmessage P{margin:0px;padding:0px}body.hmmessage{font-size: 12pt;font-family:Calibri}-->Message content here

如果你看输出发现style标签的内容还存在,我不知道为什么?那么谁能告诉我为什么style标签的内容在通过过滤器后仍然存在?

最佳答案

这是 HTML::TagFilter 的一个未记录的“特征”这是子类化的结果 HTML::Parser .后者解释 <style><script>将内容标记为 CDATA 并默认解析它们,忽略允许和拒绝的标记:

The script and style tags will always nest properly since their content is parsed in CDATA mode.

Source

要解决这个问题只需调用

$tf->ignore_elements('style');

在您的 HTML 上调用解析方法之前 - 它会忽略样式标签并执行您想要的操作。请注意,在您的示例代码中,如果您替换 stylefoo , 不会打印任何评论。

关于html - 在 HTML::TagFilter 中需要帮助,摆脱样式标签内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943556/

相关文章:

html - 表格中的字体在移动浏览器上呈现不一致

javascript - 为什么一个细胞比其他细胞低?

html - 100% 背景高度不起作用(尽管 html 和正文高度为 100%)

perl - 使用 Dumper 不会触发故障

perl - 在这种简单的情况下,我应该如何设置 DBIx::Class 结果类?

jquery - 在表单元素外部使用表单选择器

perl - 在 Perl 中,如何使用自定义顺序对哈希键进行排序?

perl - Perl 中的操作系统页面对齐分配

perl - 为什么 Perlbrew 在 Mac OS X Lion 上启动 bash?

javascript - jQuery appendTo 在 Firefox 上断开链接