Как я могу декодировать HTML -сущности?
-
05-09-2019 - |
Вопрос
Вот быстрый вопрос 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, но вы также спросили, как их изменить Асии.
Предполагая, что это действительно то, что вы хотите, и вам не нужны все персонажи Unicode, которые вы можете посмотреть на Текст :: unidecode Модуль от 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
Обратите внимание, что есть и шестнадцатеричные персонажи. Они выглядят так: é (é).
Используйте HTML :: Entities 'Decode_Enterities, чтобы перевести сущности в реальные символы. Чтобы преобразовать это в ASCII, требуется больше работы. Я использовал ICONV (интерфейс Perl: Text :: ICONV) с опцией Transliterate с некоторым успехом в прошлом. Но если вы имеете дело с ограниченным набором сущностей, или вам на самом деле не нужно, чтобы это было уменьшено до эквивалентов ASCII, вам может быть лучше ограничить то, что производит decode_entities или предоставив его на пользовательских картах конверсии. Смотрите html :: ountities doc.
Есть несколько предопределенных HTML -сущностей - &
"
>
И так далее - что вы можете жесткий код.
Тем не менее, более крупный случай числовых сущностей - {
- будет намного сложнее, так как эти ценности Unicode, и преобразование в ASCII будет варьироваться от сложно к невозможно.