From 97e60d52d622e6eefe383acfe8e872d7d791493f Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Thu, 4 Mar 2010 10:50:36 +0100 Subject: [PATCH] Iconv-Problem behoben MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/SL/Form.pm b/SL/Form.pm index e0207243f..82f073ed7 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -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]); } -- 2.20.1