Skip to content

Commit

Permalink
improve HTML Living Standard compliance of Mojo::Parameters (closes #786
Browse files Browse the repository at this point in the history
)
  • Loading branch information
kraih committed Apr 22, 2015
1 parent b3d403f commit b46e359
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 8 deletions.
3 changes: 2 additions & 1 deletion Changes
@@ -1,5 +1,6 @@

6.09 2015-04-17
6.09 2015-04-22
- Improved HTML Living Standard compliance of Mojo::Parameters.

6.08 2015-04-09
- Added is_established and server_open methods to
Expand Down
6 changes: 3 additions & 3 deletions lib/Mojo/Parameters.pm
Expand Up @@ -155,7 +155,7 @@ sub to_string {
my $charset = $self->charset;
if (defined(my $str = $self->{string})) {
$str = encode $charset, $str if $charset;
return url_escape $str, '^A-Za-z0-9\-._~!$&\'()*+,;=%:@/?';
return url_escape $str, '^A-Za-z0-9\-._~%!$&\'()*+,;=:@/?';
}

# Build pairs
Expand All @@ -167,9 +167,9 @@ sub to_string {

# Escape and replace whitespace with "+"
$name = encode $charset, $name if $charset;
$name = url_escape $name, '^A-Za-z0-9\-._~!$\'()*,:@/?';
$name = url_escape $name, '^*\-.0-9A-Z_a-z';
$value = encode $charset, $value if $charset;
$value = url_escape $value, '^A-Za-z0-9\-._~!$\'()*,:@/?';
$value = url_escape $value, '^*\-.0-9A-Z_a-z';
s/\%20/\+/g for $name, $value;

push @pairs, "$name=$value";
Expand Down
9 changes: 5 additions & 4 deletions t/mojo/parameters.t
Expand Up @@ -154,7 +154,7 @@ $params = Mojo::Parameters->new;
$params->parse('input=say%20%22%C2%AB~%22;');
is_deeply $params->pairs, ['input', 'say "«~";'], 'right structure';
is $params->param('input'), 'say "«~";', 'right value';
is "$params", 'input=say+%22%C2%AB~%22%3B', 'right result';
is "$params", 'input=say+%22%C2%AB%7E%22%3B', 'right result';
$params = Mojo::Parameters->new('♥=☃');
is_deeply $params->pairs, ['', ''], 'right structure';
is $params->param(''), '', 'right value';
Expand All @@ -175,8 +175,8 @@ $params->pairs([a => 2, b => 3]);
is $params->to_string, 'a=2&b=3', 'right result';

# Query string
$params = Mojo::Parameters->new('%AZaz09-._~&;=+!$\'()*,%:@/?');
is "$params", '%AZaz09-._~&;=+!$\'()*,%:@/?', 'right result';
$params = Mojo::Parameters->new('AZaz09-._~%!$&\'()*+,;=:@/?');
is "$params", 'AZaz09-._~%!$&\'()*+,;=:@/?', 'right result';
$params = Mojo::Parameters->new('foo{}bar');
is "$params", 'foo%7B%7Dbar', 'right result';

Expand All @@ -189,7 +189,8 @@ is "$params", '%25foo%25=%25', 'right result';
$params = Mojo::Parameters->new('!$\'()*,:@/foo?=!$\'()*,:@/?&bar=23');
is $params->param('!$\'()*,:@/foo?'), '!$\'()*,:@/?', 'right value';
is $params->param('bar'), 23, 'right value';
is "$params", '!$\'()*,:@/foo?=!$\'()*,:@/?&bar=23', 'right result';
is "$params", '%21%24%27%28%29*%2C%3A%40%2Ffoo%3F='
. '%21%24%27%28%29*%2C%3A%40%2F%3F&bar=23', 'right result';

# No charset
$params = Mojo::Parameters->new('%E5=%E4')->charset(undef);
Expand Down

0 comments on commit b46e359

Please sign in to comment.