Ответ 1
Посмотрите HTML::Entities:
use HTML::Entities;
my $html = "Snoopy & Charlie Brown";
print decode_entities($html), "\n";
Вы можете угадать вывод.
Вот быстрый вопрос Perl:
Как я могу преобразовать специальные символы HTML, такие как ü
или '
, в обычный текст ASCII?
Я начал с чего-то вроде этого:
s/\&#(\d+);/chr($1)/eg;
и может написать его для всех символов HTML, но некоторые функции вроде этого, вероятно, уже существуют?
Обратите внимание, что мне не нужен полный HTML- > Текстовый конвертер. Я уже разбираю HTML с помощью HTML::Parser
. Мне просто нужно преобразовать текст со специальными символами, которые я получаю.
Посмотрите HTML::Entities:
use HTML::Entities;
my $html = "Snoopy & Charlie Brown";
print decode_entities($html), "\n";
Вы можете угадать вывод.
В приведенных выше ответах рассказывается, как декодировать объекты в строки Perl, но вы также спросили, как их изменить в ASCII.
Предполагая, что это действительно то, что вы хотите, и вам не нужны все символы юникода, вы можете посмотреть Text:: Unidecode module от CPAN до Zap все эти нечетные символы возвращаются в примерно аналогичный набор символов ASCII:
use Text::Unidecode qw(unidecode);
use HTML::Entities qw(decode_entities);
my $source = '北亰';
print unidecode(decode_entities($source));
# That prints: Bei Jing
Обратите внимание, что есть также шестнадцатеричные символы. Они выглядят так: & # xe9; (& # XE9;).
Использовать декодирование_объектов HTML:: Entities для перевода сущностей в действительные символы. Для преобразования этого в ASCII требуется больше работы. Я использовал iconv (perl interface: Text:: Iconv) с вариантом транслитерации с некоторым успехом в прошлом. Но если вы имеете дело с ограниченным набором сущностей, или вам фактически не нужно, чтобы оно сводилось к эквивалентам ASCII, вам может быть лучше ограничить то, что производит decode_entities или предоставить ему пользовательские конверсионные карты. См. Документ HTML:: Entities.
Существует несколько предопределенных объектов HTML - &
"
>
и т.д. - что вы можете жестко закодировать.
Однако больший случай числовых объектов - {
- будет намного сложнее, так как эти значения Unicode, и преобразование в ASCII будет варьироваться от трудно до невозможного.