Отключение расширения сущностей HTML в модуле Perl HTML :: TreeBuilder

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?

  • 0
    Почему вы думаете, что это "мусор"? Обратите внимание, что вы должны установить кодировку stdout в utf8, если у вас есть терминал utf8: binmode STDOUT, ':utf8'; ,
  • 0
    Ну, конечно, это не мусор. Это символ, соответствующий &lquot; , Проблема в том, что я не хочу, чтобы эта сущность была расширена вообще.
Теги:
parsing

1 ответ

1

В качестве обходного пути вы можете позвонить

$tree->attr_encoded(1);

перед вызовом парсера. Это приведет к отключению автоматического декодирования атрибутов HTML::Parser.

Но лучше всего попросить автора HTML::TreeBuilder (например, через rt.cpan.org) сделать это автоматически, если no_expand_entities установлен.

  • 0
    Это оно! Я должен был посмотреть на родительский класс. Большое спасибо!!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню