this works around a behavior change introduced in Encode.pm 2.53
shipped with the Perl 5.20 release described here:
http://ikiwiki.info/bugs/garbled_non-ascii_characters_in_body_in_web_interface/
}
}
+sub safe_decode_utf8 ($) {
+ my $octets = shift;
+ # call decode_utf8 on >= 5.20 only if it's not already decoded,
+ # otherwise it balks, on < 5.20, always call it
+ if ($] < 5.02 || !Encode::is_utf8($octets)) {
+ return decode_utf8($octets);
+ }
+ else {
+ return $octets;
+ }
+}
+
sub decode_form_utf8 ($) {
if ($] >= 5.01) {
my $form = shift;
foreach my $f ($form->field) {
- my @value=map { decode_utf8($_) } $form->field($f);
+ my @value=map { safe_decode_utf8($_) } $form->field($f);
$form->field(name => $f,
value => \@value,
force => 1,