First stab at refactoring HTTP::Body
[catagits/HTTP-Body.git] / lib / HTTP / Body / Parser / UrlEncoded.pm
1 package HTTP::Body::Parser::UrlEncoded;
2
3 use strict;
4 use bytes;
5 use base 'HTTP::Body::Parser';
6
7 our $DECODE = qr/%([0-9a-fA-F]{2})/;
8
9 sub parse {
10     my $self = shift;
11
12     return unless $self->seen_eos;
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  =~ tr/+/ /;
22         $name  =~ s/$DECODE/chr(hex($1))/eg;
23         $value =~ tr/+/ /;
24         $value =~ s/$DECODE/chr(hex($1))/eg;
25
26         $self->context->param->add( $name => $value );
27     }
28
29     $self->buffer = '';
30 }
31
32 1;