On Wed, 15 Oct 2008 17:11:34 +0200
Rhesa Rozendaal <[EMAIL PROTECTED]> 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://www.erlbaum.net/mailman/listinfo/cgiapp    ##
##                                                            ##
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:          http://cgiapp.erlbaum.net/                 ##
##                                                            ##
################################################################

Reply via email to