for chnanen
[catagits/HTTP-Body.git] / lib / HTTP / Body / UrlEncoded.pm
CommitLineData
32b29b79 1package HTTP::Body::Urlencoded;
2
3use strict;
4use base 'HTTP::Body';
5use bytes;
6
ec28883d 7our $DECODE = qr/%(u?[0-9a-fA-F]{2,4})/;
7e2df1d9 8
58050177 9sub spin {
10 my $self = shift;
11
7e2df1d9 12 return unless $self->length == $self->content_length;
13
14 for my $pair ( split( /[&;]/, $self->{buffer} ) ) {
15
16 my ( $name, $value ) = split( /=/, $pair );
17
18 next unless defined $name;
19 next unless defined $value;
20
21 $name =~ s/$DECODE/chr(hex($1))/eg;
22 $name =~ tr/+/ /;
23 $value =~ s/$DECODE/chr(hex($1))/eg;
24 $value =~ tr/+/ /;
25
26 $self->param( $name, $value );
27 }
58050177 28
7e2df1d9 29 $self->{state} = 'done';
30 $self->{buffer} = ''
58050177 31}
32
32b29b79 331;