Thread UTF-8 und POST-Parameter
(9 answers)
Opened by JoeD at 2008-09-10 12:52
Hi,
ich sitze schon seit ein paar Tagen daran zu verstehen, wie man mit Perl UTF-8 bewältigt... Ich komme aber leider nicht dahinter und wundere mich, dass so etwas so undurchsichtig sein kann, aber wahrscheinlich liegts nur an mir. Meine Quellcode-Dateien sind alle als UTF-8 codiert. Variablen (Strings), die ich dort definiere, müssten demnach ja auch UTF-8-codiert sein. Ich verwende den Schalter -CS, sodass alle Ein- und Ausgaben das UTF-8-Format besitzten. Wenn ich mit print einen String mit Umlauten ausgebe, funktioniert es wunderbar. Nun sende ich mit einem Formular (per POST) Daten an das Script. Wenn ich diese direkt ausgebe, werden die Umlaute falsch dargestellt. Und ich verstehe nicht warum! Hier ist mein Script: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/usr/bin/perl -w -CO use strict; use utf8; use CGI qw/:standard/; my $URLRAWDATA = ""; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $URLRAWDATA, $ENV{'CONTENT_LENGTH'}); } else { $URLRAWDATA = $ENV{'QUERY_STRING'}; } my %URLDATA; my @data = split (/&/, $URLRAWDATA); for (@data) { my ($key, $value) = split /=/; $value =~ s/%0D%0A/<\|br\|>/g; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $URLDATA{$key} = $value; } print "Content-type: text/html\n\n"; print "äöü "; # richtige Umlaute: äöü print $URLDATA{'name'}; # fehlerhafte Umlaute: äöü Ich hoffe mir kann hierbei jemand weiterhelfen. Ich habe auch schon einiges ausprobiert mit den Funktionen encode/decode und Encode::from_to(..), aber was da genau passiert (ob da nur ein Flag gesetzt wird oder umrechnungen stattfinden) verstehe ich nicht aus der perldoc. Vielen Dank schonmal! Gruß Johannes |