Pergunta

Aqui está uma pergunta rápida do Perl:

Como posso converter personagens especiais HTML como ü ou ' para texto ASCII normal?

Comecei com algo assim:

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

E poderia escrevê -lo para todos os personagens HTML, mas algumas funções como essa provavelmente já existem?

Observe que não preciso de um conversor de texto HTML-> completo. Eu já analisei o html com o HTML::Parser. Eu só preciso converter o texto com os chars especiais que estou recebendo.

Foi útil?

Solução

Dar uma olhada em Html :: entidades:

use HTML::Entities;

my $html = "Snoopy & Charlie Brown";

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

Você pode adivinhar a saída.

Outras dicas

As respostas acima dizem como decodificar as entidades em cordas perl, mas você também perguntou como transformá -las ASCII.

Supondo que seja realmente isso que você quer e não quer todos os caracteres unicode, você pode olhar para o Texto :: unidecode Módulo de CPAN para Zap todos esses personagens estranhos de volta a uma coleção aproximadamente semelhante de caracteres ASCII:

use Text::Unidecode qw(unidecode);
use HTML::Entities qw(decode_entities);

my $source = '北亰';  
print unidecode(decode_entities($source));

# That prints: Bei Jing 

Observe que também existem caracteres especificados por hexadecipal. Eles se parecem com o seguinte: É (É).

Use HTML :: Entidades Decode_entities para traduzir as entidades em caracteres reais. Para converter isso em ASCII, requer mais trabalho. Eu usei o ICONV (interface Perl: text :: iconv) com a opção Transliterate com algum sucesso no passado. Mas se você estiver lidando com um conjunto limitado de entidades, ou na verdade não precisará que ele seja reduzido a equivalentes ASCII, pode ser melhor limitar o que o decode_entities produz ou fornecendo -o com mapas de conversão personalizados. Veja o html :: entidades doc.

Há um punhado de entidades HTML predefinidas - & " > E assim por diante - que você poderia codificar.

No entanto, o maior caso de entidades numéricas - { - vai ser muito mais difícil, pois esses valores são Unicode, e a conversão para ASCII vai variar de difícil para impossível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top