Pregunta

Aquí hay una pregunta rápida de Perl:

¿Cómo puedo convertir caracteres especiales HTML como ü o ' al texto ASCII normal?

Empecé con algo como esto:

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

¿Y podría escribirlo para todos los caracteres HTML, pero algunas funciones como esta probablemente ya existe?

Tenga en cuenta que no necesito un convertidor de texto HTML-> completo. Ya analizo el HTML con el HTML::Parser. Solo necesito convertir el texto con los caracteres especiales que recibo.

¿Fue útil?

Solución

Echa un vistazo a Html :: entidades:

use HTML::Entities;

my $html = "Snoopy & Charlie Brown";

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

Puedes adivinar la salida.

Otros consejos

Las respuestas anteriores le dicen cómo decodificar las entidades en cadenas de perl, pero también le preguntó cómo cambiarlas a Ascii.

Suponiendo que esto es realmente lo que quieres y no quieres todos los personajes de Unicode que puedas ver el Texto :: unidecode Módulo de CPAN para Zap a todos esos personajes extraños nuevamente en una colección más o menos similar 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 

Tenga en cuenta que también hay personajes especificados por hexadecimales. Se ven así: é (é).

Use html :: entidades decode_entities para traducir las entidades en caracteres reales. Convertir eso a ASCII requiere más trabajo. He usado ICONV (Interfaz Perl: Text :: Iconv) con la opción Transliterado con cierto éxito en el pasado. Pero si está tratando con un conjunto limitado de entidades, o en realidad no necesita que se reduzca a los equivalentes ASCII, puede ser mejor que limite lo que produce decode_entities o proporciona mapas de conversión personalizados. Ver el Doc HTML :: Entidades.

Hay un puñado de entidades HTML predefinidas - & " > y así sucesivamente, que podrías código duro.

Sin embargo, el caso más grande de entidades numerarias - { - va a ser mucho más difícil, ya que esos valores son Unicode, y la conversión a ASCII va a variar desde difícil a imposible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top