1

ディスクに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行目はフィルターを適用する場所です)。私はここで何が間違っているのですか。

4

1 に答える 1

2

まず第一に、特にそれを修正するための助けを求める前に、あなたは常に use strictそしてあなたのプログラムの始めにすべきです。use warnings

HTML::TagFilter2つのオブジェクトを作成しました。1つ$tfはフィルターがなく、もう1つは要素$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);
于 2012-05-25T08:14:02.200 に答える