Frage

Hier ist eine kurze Perlfrage:

Wie kann ich HTML -Sonderzeichen wie konvertieren wie ü oder ' zum normalen ASCII -Text?

Ich habe mit so etwas angefangen:

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

Und könnte es für alle HTML -Zeichen schreiben, aber eine solche Funktion gibt es wahrscheinlich bereits?

Beachten Sie, dass ich keinen vollständigen HTML-> Textkonverter brauche. Ich analyse die HTML bereits mit dem HTML::Parser. Ich muss den Text nur mit den speziellen Chars umwandeln, die ich bekomme.

War es hilfreich?

Lösung

Sich ansehen Html :: Entitäten:

use HTML::Entities;

my $html = "Snoopy & Charlie Brown";

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

Sie können die Ausgabe erraten.

Andere Tipps

Die obigen Antworten sagen Ihnen, wie Sie die Entitäten in Perl -Zeichenfolgen dekodieren, aber Sie haben auch gefragt ASCII.

Angenommen, dies ist wirklich das, was Sie wollen, und Sie möchten nicht alle Unicode -Charaktere, können Sie sich das ansehen Text :: Unidecode Modul von CPAN zu Zap all diese seltsamen Zeichen wieder in eine ungefähr ähnliche Sammlung von ASCII -Zeichen:

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

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

# That prints: Bei Jing 

Beachten Sie, dass auch hexspezifizierte Zeichen vorhanden sind. Sie sehen so aus: é (é).

Verwenden Sie HTML :: Entities 'decode_entities, um die Entitäten in tatsächliche Zeichen zu übersetzen. Um dies in ASCII umzuwandeln, erfordert mehr Arbeit. Ich habe Iconv (Perl Interface: text :: iconv) mit der Option "Transliterate" in der Vergangenheit mit einem gewissen Erfolg verwendet. Wenn Sie jedoch mit einer begrenzten Reihe von Entitäten zu tun haben oder sie nicht auf ASCII -Äquivalente reduziert werden müssen, können Sie besser einschränken, was Decode_entities erzeugt oder mit benutzerdefinierten Konvertierungskarten bereitstellt. Siehe HTML :: Entities Doc.

Es gibt eine Handvoll vordefinierter HTML -Einheiten - & " > Und so weiter - dass Sie Hardcode codieren können.

Der größere Fall von nummerischen Einheiten - jedoch - { - wird viel schwieriger sein, wie diese Werte sind Unicode, und die Bekehrung in ASCII wird sich von reichen von schwierig zu unmöglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top