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

在HTML :: TagFilter中需要帮助,摆脱样式标记内容,第1张

概述我有一个用perl编写的过滤器,看起来像这样 my $tf = HTML::TagFilter->new( allow => { img => { src => [] }, b => { all => [] }, i => { all => [] }, @H_301_2@ 我有一个用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=3Bpadding:0px}body.hmmessage{Font-size: 12pt=3BFont-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

如果你查看输出你发现样式标签的内容仍然存在,我不知道为什么?,那么任何人都可以告诉我为什么样式标签内容在通过过滤器后仍然存在?

解决方法 它是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上调用parse方法之前 – 它会忽略样式标记并执行您想要的 *** 作.请注意,在您的示例代码中,如果您使用foo替换样式,则不会打印任何注释.

@H_301_2@ 总结

以上是内存溢出为你收集整理的在HTML :: TagFilter中需要帮助,摆脱样式标记内容全部内容,希望文章能够帮你解决在HTML :: TagFilter中需要帮助,摆脱样式标记内容所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存