Mercurial > pub > Impl
diff lib/IMPL/Web/CGIWrapper.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/IMPL/Web/CGIWrapper.pm Fri Sep 04 19:40:23 2015 +0300 @@ -0,0 +1,75 @@ +package IMPL::Web::CGIWrapper; +use strict; + +use parent qw(CGI); +use Encode; + +our $NO_DECODE = 0; + +sub param { + my $this = shift; + + return $this->SUPER::param(@_) if $NO_DECODE; + + if (wantarray) { + my @result = $this->SUPER::param(@_); + + return map Encode::is_utf8($_) + ? $_ + : Encode::decode( $this->charset, $_, Encode::LEAVE_SRC ), @result; + } + else { + my $result = $this->SUPER::param(@_); + + return Encode::is_utf8($result) + ? $result + : Encode::decode( $this->charset, $result, Encode::LEAVE_SRC ); + } + +} + +sub upload { + my $this = shift; + + local $NO_DECODE = 1; + my $oldCharset = $this->charset(); + $this->charset('ISO-8859-1'); + + my $fh = $this->SUPER::upload(@_); + + $this->charset($oldCharset); + return $fh; +} + +1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::Web::CGIWrapper> - обетрка вокруг стандартного объекта C<CGI> + +=head1 DESCRIPTION + +Наследуется от C<CGI>, и переопределяет метод C<param> для декодирования +строковых параметров. В остальном функциональность аналогична стандартному +модулю C<CGI>. + +=head1 MEMBERS + +=head2 C<$NO_DECODE> + +Глобальная переменная для отключения декодирования параметров. + +=begin code + +{ + local $IMPL::Web::CGIWrapper::NO_DECODE = 1; + my $raw = $q->param('binary'); +} + +=end code + +=cut \ No newline at end of file