禁用在HTML :: TreeBuilder Perl模块中扩展的HTML实体

时间:2013-10-31 09:59:38

标签: html perl parsing

考虑以下脚本:

#!/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属性中强制禁用实体扩展?

1 个答案:

答案 0 :(得分:1)

作为解决方法,您可以致电

$tree->attr_encoded(1);

在调用解析器之前。这将禁用HTML::Parser自动解码属性。

但最好是要求HTML::TreeBuilder的作者(例如通过rt.cpan.org)在设置no_expand_entities时自动执行此操作。

相关问题