Suche: encode_html auf Steroiden
am 08.07.2006 18:35:05 von unknownPost removed (X-No-Archive: yes)
Post removed (X-No-Archive: yes)
Christoph Biedl
> Hallo,
>
> ich bin auf der Suche nach einer Funktion, die einen Text in html wandelt.
> Was sie von einem normalen encode_html unterscheidet, ist der Umgang mit
> 8bit-Zeichen.
>
> Die Behandlung sollte wie folgt sein:
> - Untersuche, ob die 8bit-Zeichen eine gültige utf-8-Sequenz darstellen,
> dann nimm utf-8 an (Ja, das funktioniert nicht 100%ig), konvertiere
> die 8bit-Abschnitte in benannte (numerisch reicht) Zeichen.
> - Ansonsten nimm einen 8bit-Zeichensatz an, der mit als Parameter
> übergeben wird (z.B. "iso-8859-2") und die 8bit-Zeichen werden in
> entsprechende benannte Zeichen konvertiert.
>
> Nichts, was man nicht mit einigen Handgriffen selber bauen könnte -
> aber eigentlich sollte es so etwas schon geben.
Eigentlich nicht --- wie du schon richtig, muss man hier "raten", und
das ist nichts, was ich in einer "offiziellen" Funktion haben möchte.
Warum weisst du eigentlich nicht, in welchem Encoding die Daten
vorliegen? Vielleicht kann man bereits hier ansetzen?
>
> Zur Sicherheit noch einmal der Hinweis, daß der Konverter auch in
> Umgebungen funktionieren soll, die nicht Latin1 oder leichte Abwandlungen
> davon heißen.
>
Man kann so ziemlich alles mit Encode machen, also das Prüfen, ob eine
Octetsequenz eine gültige utf-8-Sequenz ist, sowie das Umwandeln in
beliebige andere Encodings. Zum Beispiel so:
#!/usr/bin/perl -w
use Encode;
use HTML::Entities;
use strict;
# Annahme: $input sind "Octets"
# $encoding ist das "Ersatz-Encoding"
my $input = "äöü<>&!+ "; # latin-1 oder latin-2
#$input = encode("utf-8", $input); # damit könnte man utf-8 erzeugen
my $encoding = "iso-8859-2";
# my $check=$input ist notwendig, weil Encode manchmal die
# Eingabeparameter zerstört
eval { decode("utf-8", my $check=$input, Encode::FB_CROAK) };
if (!$@) {
$encoding = "utf-8";
}
my $string = decode($encoding, $input);
my $html = HTML::Entities::encode_entities_numeric($string);
warn $html;
__END__
Gruß,
Slaven
PS: jetzt habe ich schon so viel geschrieben und dann fällt mir ein,
dass es tatsächlich Encode::Guess gibt, und das sogar als
Core-Modul...
--
Slaven Rezic - slaven
Start a WWW browser - OS independent:
http://user.cs.tu-berlin.de/~eserte/src/perl/WWWBrowser/
Post removed (X-No-Archive: yes)