Я использую Mojo :: DOM , чтобы идентифицировать и распечатать фразы (означающие строки текста между выбранными тегами HTML) в сотнях документов HTML, которые я извлекаю из существующего содержимого в Movable Typeсистема управления контентом.
Я пишу эти фразы в файл, чтобы их можно было перевести на другие языки следующим образом:
$dom = Mojo::DOM->new(Mojo::Util::decode('UTF-8', $page->text));
##########
#
# Break down the Body into phrases. This is done by listing the tags and tag combinations that
# surround each block of text that we're looking to capture.
#
##########
print FILE "\n\t### Body\n\n";
for my $phrase ( $dom->find('h1, h2, h2 b, h3, p, p strong, span, a, caption, th, li, li a')->map('text')->each ) {
print_phrase($phrase); # utility function to write out the phrase to a file
}
Когда Mojo :: DOM обнаружил встроенные HTML-сущности(например, ™
и
) он преобразовывал эти объекты в закодированные символы, а не передавал их как написано.Я хотел, чтобы сущности передавались как написано.
Я понял, что могу использовать Mojo :: Util :: decode для передачи этих сущностей HTML в файл, который я пишу.Проблема в том, что " Вы можете вызывать decode 'UTF-8' только для строки, которая содержит действительный UTF-8. Если этого не произойдет, например, потому что он уже преобразован в символы Perl, он вернетundef. "
Если это так, я должен либо попытаться выяснить, как проверить кодировку текущей HTML-страницы перед вызовом Mojo::Util::decode('UTF-8', $page->text)
, либо использовать другой метод для сохранения закодированногоСущности HTML.
Как наиболее надежно сохранить закодированные сущности HTML при обработке документов HTML с Mojo :: DOM?