考虑以下脚本:
#!/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«');
print "\n";
print test('<a href="#" title="«"></a>')
它会打印:
<html>test«</html>
<html><a href="#" title="?"></a></html>
由于调用no_expand_entities(1)
HTML实体«
未在HTML元素中展开。但是由于某种原因,此模式不会更改属性的默认行为 - 同一实体将展开并显示为垃圾。
请问您如何在HTML属性中强制禁用实体扩展?
答案 0 :(得分:1)
作为解决方法,您可以致电
$tree->attr_encoded(1);
在调用解析器之前。这将禁用HTML::Parser
自动解码属性。
但最好是要求HTML::TreeBuilder
的作者(例如通过rt.cpan.org)在设置no_expand_entities
时自动执行此操作。