package HTML::FillInForm::ForceUTF8;
use strict;
use warnings;
use base qw(HTML::FillInForm);
use Encode;
our $VERSION = '0.03';
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::is_utf8($option{scalarref}) ) {
my $val = ${$option{scalarref}};
Encode::_utf8_on( $val );
$option{scalarref} = \$val;
}
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__
=encoding utf-8
=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<HTML::FillInForm>
=head1 LICENSE
Copyright (C) Masahiro Nagano.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 AUTHOR
Masahiro Nagano E<lt>kazeburo@gmail.comE<gt>
=cut