Iconv-Problem behoben
authorMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 4 Mar 2010 09:50:36 +0000 (10:50 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 4 Mar 2010 09:50:36 +0000 (10:50 +0100)
Soll der Inhalt von $form mit Iconv von UTF-8 nach ISO-8859-15
konvertiert werden (z.B. weil der GET-Parameter INPUT_ENCODING auf
UTF-8 gesetzt und $dbcharset = 'ISO-8859-15' ist), so gibt
$iconv->convert($form->{key}) immer undef zurück. Ich weiß nicht
warum.

Übergibt man $iconv->convert() hingegen eine Kopie eines solchen
Wertes aus $form, so wird das erwartete Ergebnis erzeugt.

SL/Form.pm

index e020724..82f073e 100644 (file)
@@ -203,7 +203,10 @@ sub _recode_recursively {
   if (any { ref $param eq $_ } qw(Form HASH)) {
     foreach my $key (keys %{ $param }) {
       if (!ref $param->{$key}) {
-        $param->{$key} = $iconv->convert($param->{$key});
+        # Workaround for a bug: converting $param->{$key} directly
+        # leads to 'undef'. I don't know why. Converting a copy works,
+        # though.
+        $param->{$key} = $iconv->convert("" . $param->{$key});
       } else {
         _recode_recursively($iconv, $param->{$key});
       }
@@ -212,7 +215,10 @@ sub _recode_recursively {
   } elsif (ref $param eq 'ARRAY') {
     foreach my $idx (0 .. scalar(@{ $param }) - 1) {
       if (!ref $param->[$idx]) {
-        $param->[$idx] = $iconv->convert($param->[$idx]);
+        # Workaround for a bug: converting $param->[$idx] directly
+        # leads to 'undef'. I don't know why. Converting a copy works,
+        # though.
+        $param->[$idx] = $iconv->convert("" . $param->[$idx]);
       } else {
         _recode_recursively($iconv, $param->[$idx]);
       }