Wie kann ich HTML -Entitäten dekodieren?
-
05-09-2019 - |
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.
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.