package HTML::FillInForm::ForceUTF8; use strict; use warnings; use base qw(HTML::FillInForm); use Encode; our $VERSION = '0.02'; sub fill { my ( $self, %option ) = @_; if ( exists $option{file} ) { if ( ref $option{file} ) { binmode $option{file}, ":utf8"; } else { open my $fh, ":utf8", $option{file}; $option{file} = $fh; } } elsif ( exists $option{scalarref} ) { Encode::_utf8_on( ${ $option{scalarref} } ) unless Encode::is_utf8( ${ $option{scalarref} } ); } elsif ( exists $option{arrayref} ) { for ( @{ $option{arrayref} } ) { Encode::_utf8_on($_) unless Encode::is_utf8($_); } } $self->SUPER::fill(%option); } sub _get_param { my $self = shift; my $ret = $self->SUPER::_get_param(@_); for ( ref($ret) ? @$ret : $ret ) { Encode::_utf8_on($_) unless Encode::is_utf8($_); } return $ret; } 1; __END__ =head1 NAME HTML::FillInForm::ForceUTF8 - FillInForm with utf8 encoding =head1 SYNOPSIS use HTML::FillInForm::ForceUTF8; my $fif = HTML::FillInForm::ForceUTF8->new; my $fdat; $fdat->{foo} = "\x{306a}\x{304c}\x{306e}"; #Unicode flagged $fdat->{bar} = "\xe3\x81\xaa\xe3\x81\x8c\xe3\x81\xae"; # UTF8 bytes my $output = $fif->fill( scalarref => \$html, fdat => $fdat ); =head1 DESCRIPTION HTML::FillInForm::ForceUTF8 is a subclass of HTML::FillInForm that forces utf8 flag on html and parameters. This allows you to prevent filling garbled result. =head1 SEE ALSO L =head1 AUTHOR Masahiro Nagano, Ekazeburo@nomadscafe.jpE =head1 COPYRIGHT AND LICENSE Copyright (C) 2006 by Masahiro Nagano This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.5 or, at your option, any later version of Perl 5 you may have available. =cut