[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