0

次のスクリプトを検討してください。

#!/usr/bin/perl

use strict;

use HTML::TreeBuilder;

sub test
{
  my ($content) = @_;

  my $tree = HTML::TreeBuilder->new;
  $tree->implicit_tags(0);
  $tree->no_expand_entities(1);
  $tree->parse_content($content);

  return $tree->as_HTML(q{<>&});
}

print test('test&laquo;');
print "\n";
print test('<a href="#" title="&laquo;"></a>')

それは印刷されます:

<html>test&laquo;</html>
<html><a href="#" title="?"></a></html>

no_expand_entities(1)HTMLエンティティを呼び出すため、&laquo;HTML要素内で展開されません。ただし、何らかの理由で、このモードは属性のデフォルトの動作を変更しません。同じエンティティが展開され、ガベージとして表示されます。

HTML 属性内でエンティティの展開を強制的に無効にする方法を教えてください。

4

1 に答える 1

1

回避策として、電話することができます

$tree->attr_encoded(1);

パーサーを呼び出す前。HTML::Parserこれにより、 の属性の自動デコードが無効になります。

しかし、HTML::TreeBuilder(rt.cpan.org などを介して)の作成者に、no_expand_entitiesが設定されている場合はこれを自動的に行うように依頼することをお勧めします。

于 2013-10-31T10:36:04.697 に答える