Hallo!
Ich übergebe mit einem CGI/Perl-Skript Formulardaten, bei denen internationale Zeichensätze verwendet werden. Die Formulardaten werden anschließend gespeichert und wieder in HTML ausgegeben (z.B. als &_#_252;). Die Codierung erfolgt in Unicode. Für ein- und zweibyte-Werte habe ich ein funktionierendes Skript (das etwa bei "ü" die übergebenen Werte 195-188 in &_#_252; umwandelt), aber es scheitert bei dreibyte-Werten, die dann entstehen, wenn jemand z.B. aus Word öffnende oder schließende Anführungszeichen ins Formularfeld kopiert. Für JavaScript scheint es eine Lösung zu geben (http://selfaktuell.teamone.de/artikel/javascript/utf8b64/utf8.htm#a4). Gibt es ein ähnliche Lösung für Perl?
Lieben Dank!
Hier die Lösung, die ich bislang für die zweibyte-Werte verwende:
sub utfucs {
$z=$text;
$x=ord(substr($z,$i,1));
$y=ord(substr($z,$i+1,1));
if ($x>128) {
$ucs=($x-192)*2**6+($y-128);
$ucs="&#".$ucs.";";
substr($text,$i,2)=$ucs;
Nächstes Zeichen in $text in Steuerschleife; $i = Laufvariable:
$i=$i+length($ucs)-2;
} #if ($x>128)
}