Thread UTF-8 und POST-Parameter (9 answers)
Opened by JoeD at 2008-09-10 12:52

JoeD
 2008-09-10 12:52
#114477 #114477
User since
2008-09-10
3 Artikel
BenutzerIn
[default_avatar]
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

View full thread UTF-8 und POST-Parameter