Как я могу декодировать HTML-объекты? - PullRequest
22 голосов
/ 23 февраля 2009

Вот быстрый Perl вопрос:

Как я могу преобразовать специальные символы HTML, такие как ü или ', в обычный текст ASCII?

Я начал с чего-то вроде этого:

s/\&#(\d+);/chr($1)/eg;

и могли бы написать это для всех символов HTML, но какая-то функция, подобная этой, возможно, уже существует?

Обратите внимание, что мне не нужен полный HTML-> текстовый конвертер. Я уже разбираю HTML с HTML::Parser. Мне просто нужно преобразовать текст с помощью специальных символов, которые я получаю.

Ответы [ 4 ]

50 голосов
/ 23 февраля 2009

Взгляните на HTML :: Entities :

use HTML::Entities;

my $html = "Snoopy & Charlie Brown";

print decode_entities($html), "\n";

Вы можете угадать вывод.

21 голосов
/ 26 февраля 2009

Ответы выше говорят вам, как декодировать сущности в строки Perl, но вы также спрашивали, как преобразовать их в ASCII .

Предполагая, что это действительно то, что вам нужно, и вам не нужны все символы Юникода, которые вы можете посмотреть в модуле Text :: 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 
6 голосов
/ 23 февраля 2009

Обратите внимание, что есть и шестнадцатеричные символы. Они выглядят так: & # xe9; (& # XE9;)

.

Используйте HTML :: Entities 'decode_entities для перевода сущностей в реальные символы. Для преобразования этого в ASCII требуется больше работы. Я использовал iconv (интерфейс Perl: Text :: Iconv) с опцией транслитерации с некоторым успехом в прошлом. Но если вы имеете дело с ограниченным набором объектов, или вам на самом деле не нужно сокращать его до эквивалентов ASCII, вам может быть лучше ограничить то, что производит decode_entities, или предоставить его конверсионные карты. См. Документ HTML :: Entities.

3 голосов
/ 23 февраля 2009

Существует несколько предопределенных сущностей HTML - & " > и т. Д., Которые можно жестко кодировать.

Тем не менее, больший регистр числовых объектов - { - будет намного сложнее, так как эти значения равны Unicode , а преобразование в ASCII будет варьироваться от сложно до невозможно .

...