Рассмотрим следующий сценарий:
#!/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?
В качестве обходного пути вы можете позвонить
$tree->attr_encoded(1);
перед вызовом парсера. Это приведет к отключению автоматического декодирования атрибутов HTML::Parser
.
Но лучше всего попросить автора HTML::TreeBuilder
(например, через rt.cpan.org) сделать это автоматически, если no_expand_entities
установлен.
binmode STDOUT, ':utf8';
,&lquot;
, Проблема в том, что я не хочу, чтобы эта сущность была расширена вообще.