[cgiapp] Re: utf8 form processing

Mike Tonks fluffymike at googlemail.com
Thu Oct 16 14:34:26 EDT 2008


That would be nice indeed, and perhaps a little switch in C::A to enable it?

2008/10/16 Mark Stosberg <mark at summersault.com>:
> On Wed, 15 Oct 2008 17:11:34 +0200
> Rhesa Rozendaal <perl at rhesa.com> wrote:
>
>> Mike Tonks wrote:
>> > Hi All,
>> >
>> > I recently encountered the dreaded utf8 funny characters, again.  This
>> > time on the input data coming from form entry fields.
>> >
>> > It's CGI.pm that actually does the processing, and needs to read the
>> > stream as utf8.  There is a flag for this, but I couldn't get that to
>> > work, so as a temporary measure I read all the parameters and pass
>> > them through decode_utf8.  Does anyone have a better method?
>>
>> Here's what I use:
>>
>> package CGI::as_utf;
>>
>> BEGIN
>> {
>>      use strict;
>>      use warnings;
>>      use CGI;
>>      use Encode;
>>
>>      {
>>          no warnings 'redefine';
>>          my $param_org = \&CGI::param;
>>
>>          my $might_decode = sub {
>>              my $p = shift;
>>              return ( !$p || ( ref $p && fileno($p) ) )
>>                  ? $p
>>                  : eval { decode_utf8($p) } || $p;
>>          };
>>
>>          *CGI::param = sub {
>>              my $q = $_[0];    # assume object calls always
>>              my $p = $_[1];
>>
>>              goto &$param_org if scalar @_ != 2;
>>
>>              return wantarray
>>                  ? map { $might_decode->($_) } $q->$param_org($p)
>>                  : $might_decode->( $q->$param_org($p) );
>>              }
>>      }
>> }
>>
>> 1;
>>
>> This does the right thing for file uploads, as well as handling scalar and
>> list context.
>
> That looks useful, Rhesa.
>
> Is there a variation of it that makes sense to submit as patch for CGI.pm?
>
>    Mark
>
>
>
> #####  CGI::Application community mailing list  ################
> ##                                                            ##
> ##  To unsubscribe, or change your message delivery options,  ##
> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
> ##                                                            ##
> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
> ##                                                            ##
> ################################################################
>
>


More information about the cgiapp mailing list