.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Plack::Request::WithEncoding 3pm" .TH Plack::Request::WithEncoding 3pm "2020-08-08" "perl v5.30.3" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Plack::Request::WithEncoding \- Subclass of Plack::Request which supports encoded requests. .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Plack::Request::WithEncoding; \& \& my $app_or_middleware = sub { \& my $env = shift; # PSGI env \& \& # Example of $env \& # \& # $env = { \& # QUERY_STRING => \*(Aqquery=%82%d9%82%b0\*(Aq, # <= encoded by \*(Aqcp932\*(Aq \& # REQUEST_METHOD => \*(AqGET\*(Aq, \& # HTTP_HOST => \*(Aqexample.com\*(Aq, \& # PATH_INFO => \*(Aq/foo/bar\*(Aq, \& # }; \& \& my $req = Plack::Request::WithEncoding\->new($env); \& \& $req\->env\->{\*(Aqplack.request.withencoding.encoding\*(Aq} = \*(Aqcp932\*(Aq; # <= specify the encoding method. \& \& my $query = $req\->param(\*(Aqquery\*(Aq); # <= get parameters of \*(Aqquery\*(Aq that is decoded by \*(Aqcp932\*(Aq. \& \& my $res = $req\->new_response(200); # new Plack::Response \& $res\->finalize; \& }; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Plack::Request::WithEncoding is a subclass of Plack::Request that supports encoded requests. It overrides many Plack::Request attributes to return decoded values. This feature allows a single application to seamlessly handle a wide variety of different language code sets. Applications that must be able to handle many different translations at once will find this extension able to quickly solve that problem. .PP The target attributes to be encoded are described at \*(L"\s-1SPECIFICATION OF THE ENCODING METHOD\*(R"\s0. .ie n .SH "ATTRIBUTES of ""Plack::Request::WithEncoding""" .el .SH "ATTRIBUTES of \f(CWPlack::Request::WithEncoding\fP" .IX Header "ATTRIBUTES of Plack::Request::WithEncoding" .IP "\(bu" 4 encoding .Sp Returns an encoding method to decode parameters. .IP "\(bu" 4 query_parameters .Sp Returns a reference of Hash::MultiValue instance that contains \fBdecoded\fR query parameters. .IP "\(bu" 4 body_parameters .Sp Returns a reference of Hash::MultiValue instance that contains \fBdecoded\fR request body. .IP "\(bu" 4 parameters .Sp Returns a reference of Hash::MultiValue instance that contains \fBdecoded\fR parameters. The parameters are merged with \f(CW\*(C`query_parameters\*(C'\fR and \f(CW\*(C`body_parameters\*(C'\fR. .IP "\(bu" 4 param .Sp Returns \fBdecoded\fR parameters with a \s-1CGI\s0.pm\-compatible param method. This is an alternative method for accessing parameters in \&\f(CW\*(C`$req\->parameters\*(C'\fR. Unlike \s-1CGI\s0.pm, it does \fBnot\fR allow setting or modifying query parameters. .Sp .Vb 3 \& $value = $req\->param(\*(Aqfoo\*(Aq); \& @values = $req\->param(\*(Aqfoo\*(Aq); \& @params = $req\->param; .Ve .IP "\(bu" 4 raw_query_parameters .Sp This attribute is the same as \f(CW\*(C`query_parameters\*(C'\fR of Plack::Request. .IP "\(bu" 4 raw_body_parameters .Sp This attribute is the same as \f(CW\*(C`body_parameters\*(C'\fR of Plack::Request. .IP "\(bu" 4 raw_parameters .Sp This attribute is the same as \f(CW\*(C`parameters\*(C'\fR of Plack::Request. .IP "\(bu" 4 raw_param .Sp This attribute is the same as \f(CW\*(C`param\*(C'\fR of Plack::Request. .SH "SPECIFICATION OF THE ENCODING METHOD" .IX Header "SPECIFICATION OF THE ENCODING METHOD" You can specify the character-encoding to decode, like so; .PP .Vb 1 \& $req\->env\->{\*(Aqplack.request.withencoding.encoding\*(Aq} = \*(Aqutf\-7\*(Aq; # <= set utf\-7 .Ve .PP When this character-encoding wasn't given through \f(CW\*(C`$req\->env\->{\*(Aqplack.request.withencoding.encoding\*(Aq}\*(C'\fR, this module uses \*(L"utf\-8\*(R" as the default character-encoding to decode. It would be better to specify this character-encoding explicitly because the readability and understandability of the code behavior would be improved. .PP Once this value was specified by falsy value (e.g. `undef`, 0 and ''), this module returns \fBraw value\fR (i.e. never decodes). .PP The example of a code is shown below. .PP .Vb 3 \& print exists $req\->env\->{\*(Aqplack.request.withencoding.encoding\*(Aq} ? \*(AqEXISTS\*(Aq \& : \*(AqNOT EXISTS\*(Aq; # <= NOT EXISTS \& $query = $req\->param(\*(Aqquery\*(Aq); # <= get parameters of \*(Aqquery\*(Aq that is decoded by \*(Aqutf\-8\*(Aq (*** YOU SHOULD NOT USE LIKE THIS ***) \& \& $req\->env\->{\*(Aqplack.request.withencoding.encoding\*(Aq} = undef; # <= explicitly specify the \`undef\` \& $query = $req\->param(\*(Aqquery\*(Aq); # <= get parameters of \*(Aqquery\*(Aq that is not decoded (raw value) \& \& $req\->env\->{\*(Aqplack.request.withencoding.encoding\*(Aq} = \*(Aqcp932\*(Aq; # <= specify the \*(Aqcp932\*(Aq as encoding method \& $query = $req\->param(\*(Aqquery\*(Aq); # <= get parameters of \*(Aqquery\*(Aq that is decoded by \*(Aqcp932\*(Aq .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Plack::Request .SH "LICENSE" .IX Header "LICENSE" Copyright (C) moznion. .PP This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. .SH "AUTHOR" .IX Header "AUTHOR" moznion