删除perl中的特定html标记

时间:2012-05-25 06:14:46

标签: perl

我有一个存储在磁盘上的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行是我应用过滤器的地方)。我在这做错了什么。

1 个答案:

答案 0 :(得分:2)

首先,您应该在程序开始时始终 use strictuse 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);