Commit | Line | Data |
4f5db602 |
1 | package HTTP::Body::UrlEncoded; |
32b29b79 |
2 | |
3 | use strict; |
4 | use base 'HTTP::Body'; |
5 | use bytes; |
6 | |
ec28883d |
7 | our $DECODE = qr/%(u?[0-9a-fA-F]{2,4})/; |
7e2df1d9 |
8 | |
58050177 |
9 | sub 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 |
33 | 1; |