NAME
WWW::Form::UrlEncoded - parser and builder for application/x-www-form-urlencoded
SYNOPSIS
my
$query_string
=
"foo=bar&baz=param"
;
my
@params
= parse_urlencoded(
$query_string
);
# ('foo','bar','baz','param')
my
$query_string
= build_urlencoded(
'foo'
,
'bar'
,
'baz'
,
'param'
);
# "foo=bar&baz=param";
DESCRIPTION
WWW::Form::UrlEncoded provides application/x-www-form-urlencoded parser and builder. This module aims to have compatibility with other CPAN modules like HTTP::Body's urlencoded parser.
This module try to use WWW::Form::UrlEncoded::XS by default and fail to it, use WWW::Form::UrlEncoded::PP instead
Parser rules
WWW::Form::UrlEncoded parsed string in this rule.
- 1. Split application/x-www-form-urlencoded payload by
&
(U+0026) or;
(U+003B) - 2. Ready empty array to store
name
andvalue
- 3. For each divided string, apply next steps.
-
- 1. If first character of string is
' '
(U+0020 SPACE), remove it. - 2. If string has
=
, let name be substring from start to first=
, but excluding first=
, and remains to be value. If there is no strings after first=
, value to be empty string""
. If first=
is first character of the string, let key be empty string""
. If string does not have any=
, all of the string to be key and value to be empty string""
. - 3. replace all
+
(U+002B) with' '
(U+0020 SPACE). - 4. unescape name and value. push them to the array.
- 1. If first character of string is
- 4. return the array.
Test data
'a=b&c=d'
=> [
"a"
,
"b"
,
"c"
,
"d"
]
'a=b;c=d'
=> [
"a"
,
"b"
,
"c"
,
"d"
]
'a=1&b=2;c=3'
=> [
"a"
,
"1"
,
"b"
,
"2"
,
"c"
,
"3"
]
'a==b&c==d'
=> [
"a"
,
"=b"
,
"c"
,
"=d"
]
'a=b& c=d'
=> [
"a"
,
"b"
,
"c"
,
"d"
]
'a=b; c=d'
=> [
"a"
,
"b"
,
"c"
,
"d"
]
'a=b; c =d'
=> [
"a"
,
"b"
,
"c "
,
"d"
]
'a=b;c= d '
=> [
"a"
,
"b"
,
"c"
,
" d "
]
'a=b&+c=d'
=> [
"a"
,
"b"
,
" c"
,
"d"
]
'a=b&+c+=d'
=> [
"a"
,
"b"
,
" c "
,
"d"
]
'a=b&c=+d+'
=> [
"a"
,
"b"
,
"c"
,
" d "
]
'a=b&%20c=d'
=> [
"a"
,
"b"
,
" c"
,
"d"
]
'a=b&%20c%20=d'
=> [
"a"
,
"b"
,
" c "
,
"d"
]
'a=b&c=%20d%20'
=> [
"a"
,
"b"
,
"c"
,
" d "
]
'a&c=d'
=> [
"a"
,
""
,
"c"
,
"d"
]
'a=b&=d'
=> [
"a"
,
"b"
,
""
,
"d"
]
'a=b&='
=> [
"a"
,
"b"
,
""
,
""
]
'&'
=> [
""
,
""
,
""
,
""
]
'='
=> [
""
,
""
]
''
=> []
FUNCTION
- @param = parse_urlencoded($str:String)
-
parse
$str
and return Array that contains key-value pairs. - $param:ArrayRef = parse_urlencoded_arrayref($str:String)
-
parse
$str
and return ArrayRef that contains key-value pairs. - $string = build_urlencoded(@param)
- $string = build_urlencoded(@param, $delim)
- $string = build_urlencoded(\@param)
- $string = build_urlencoded(\@param, $delim)
- $string = build_urlencoded(\%param)
- $string = build_urlencoded(\%param, $delim)
-
build urlencoded string from param. build_urlencoded accepts arrayref and hashref values.
build_urlencoded(
foo
=> 1,
foo
=> 2);
build_urlencoded(
foo
=> [1,2] );
build_urlencoded( [
foo
=> 1,
foo
=> 2 ] );
build_urlencoded( [
foo
=> [1,2]] );
build_urlencoded( {
foo
=> [1,2]} );
If
$delim
parameter is passed, this function use it instead of using&
. - $string = build_urlencoded_utf8(...)
-
This function is almost same as
build_urlencoded
. build_urlencoded_utf8 callutf8::encode
for all parameters.
ENVIRONMENT VALUE
WWW_FORM_URLENCODED_PP
If true, WWW::Form::UrlEncoded force to load WWW::Form::UrlEncoded::PP.
SEE ALSO
CPAN already has some application/x-www-form-urlencoded parser modules like these.
They does not fully compatible with WWW::Form::UrlEncoded. Handling of empty key-value and supporting separator characters are different.
LICENSE
Copyright (C) Masahiro Nagano.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Masahiro Nagano <kazeburo@gmail.com>