我有一个存储在磁盘上的html文件(该文件是This)。我想删除图像的所有html标签。这是我到目前为止所尝试过的。
#!/usr/bin/perl -w
use HTML::TagFilter;
my $tf = new HTML::TagFilter;
open READ, "D:\\Scripts\\file.html" or die "Couldn't open file: $!";
$string1 = join("", <READ>);
close READ;
my $self = HTML::TagFilter->new(deny => {img => {'all'}});
open (MYFILE, '>D:\\Scripts\\remove.html');
print MYFILE $tf->filter($string1);
close (MYFILE);
如果我只是运行此程序,则打印
Odd number of elements in anonymous hash at remove everything else.pl line 9.
Parsing of undecoded UTF-8 will give garbage when decoding entities at C:/Perl64
/site/lib/HTML/TagFilter.pm line 499.
存储文件但没有删除图像标记(第9行是我应用过滤器的地方)。我在这做错了什么。
答案 0 :(得分:2)
首先,您应该在程序开始时始终 use strict
和use warnings
,尤其是在寻求帮助解决之前。
您创建了两个HTML::TagFilter
个对象:$tf
没有过滤器,$self
删除了<img>
个元素。您已使用$tf
处理HTML,因此您的数据不会更改。
此代码有效,我提到的更正和其他几个。
use strict;
use warnings;
use HTML::TagFilter;
my $tf = HTML::TagFilter->new(deny => {img => {all => []}});
my $html = do {
open my $fh, 'D:\Scripts\file.html' or die "Couldn't open file: $!";
local $/;
<$fh>;
};
open my $out, '>', 'D:\Scripts\remove.html' or die "Unable to open output file: $!";
print $out $tf->filter($html);