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 回答