proto urlencode_array(array formdata [, string numeric_prefix])
Purpose: Generate a form encoded query string from an associative (or
indexed) array.
Example:
$formdata = array('page'=>'home',
'users'=>array('bob'=>array('fname'=>'Bob','lname'=>'Smith'),
'jdoe'=>array('fname'=>'Jane','lname'=>'Doe')),
'errors'=>array('missing date','missing
time','sums not =='),
'other data');
echo urlencode_array($formdata);
/* outputs the following
page=home&users[bob][fname]=Bob&users[bob][lname]=Smith&users[jdoe][fname]=J
ane&users[jdoe][lname]=Doe&errors[0]=missing+date&errors[1]=missing+time&err
ors[2]=sums+not+%3D%3D&0=other+data
*/
Example 2:
Same array as above but encoded using a prefix for numeric values:
echo urlencode_array($formdata, 'misc_');
page=home&users[bob][fname]=Bob&users[bob][lname]=Smith&users[jdoe][fname]=J
ane&users[jdoe][lname]=Doe&errors[0]=missing+date&errors[1]=missing+time&err
ors[2]=sums+not+%3D%3D&misc_0=other+data
Note Example 2 allows numerically indexed arrays to generate query strings
which will yield legal variable names, but doesn't enforce such behavior.
Also, the numeric_prefix only applies to the root array's indexes since
subsequence arrays may be indexed without compromise.
The patch is available at:
http://frankenbox.alphaweb.net/test/urlencode_array.diff.txt
The underlying function php_url_encode_hash() is meant for later use in
http_request() and for handling a context option in the http:// wrapper, but
it seems as though there's no harm exporting it to userland. (Hence the
addition of urlencode_array() -- I'm flexible on the name, array_urlencode()
has been suggested as well)
I'm looking for a couple +1s before I actually commit this though.
-Sara
I all my time coding PHP I have yet to encounter where such a function would
be useful. It most cases, it would be simpler to generate the final data
rather then 2 source arrays, which then will be used to generate the final
query string. The one possible issue that I see is people using
urlencode_array($_GET) and forgetting about things like magic_quotes_gpc
resulting in data corruption etc... Many people also do quite a bit of input
validation and usually re-use the same code to build the query string for
subsequent pages.
-0.5
Ilia
proto urlencode_array(array formdata [, string numeric_prefix])
Purpose: Generate a form encoded query string from an associative (or
indexed) array.Example:
$formdata = array('page'=>'home',
'users'=>array('bob'=>array('fname'=>'Bob','lname'=>'Smith'),
'jdoe'=>array('fname'=>'Jane','lname'=>'Doe')),
'errors'=>array('missing date','missing
time','sums not =='),
'other data');echo urlencode_array($formdata);
/* outputs the followingpage=home&users[bob][fname]=Bob&users[bob][lname]=Smith&users[jdoe][fname]=
J
ane&users[jdoe][lname]=Doe&errors[0]=missing+date&errors[1]=missing+time&er
r ors[2]=sums+not+%3D%3D&0=other+data
*/Example 2:
Same array as above but encoded using a prefix for numeric values:
echo urlencode_array($formdata, 'misc_');
page=home&users[bob][fname]=Bob&users[bob][lname]=Smith&users[jdoe][fname]=
J
ane&users[jdoe][lname]=Doe&errors[0]=missing+date&errors[1]=missing+time&er
r ors[2]=sums+not+%3D%3D&misc_0=other+dataNote Example 2 allows numerically indexed arrays to generate query strings
which will yield legal variable names, but doesn't enforce such behavior.
Also, the numeric_prefix only applies to the root array's indexes since
subsequence arrays may be indexed without compromise.The patch is available at:
http://frankenbox.alphaweb.net/test/urlencode_array.diff.txtThe underlying function php_url_encode_hash() is meant for later use in
http_request() and for handling a context option in the http:// wrapper,
but it seems as though there's no harm exporting it to userland. (Hence the
addition of urlencode_array() -- I'm flexible on the name,
array_urlencode() has been suggested as well)I'm looking for a couple +1s before I actually commit this though.
-Sara
- Thus wrote Sara Golemon (pollita@php.net):
proto urlencode_array(array formdata [, string numeric_prefix])
Purpose: Generate a form encoded query string from an associative (or
indexed) array.
Can this not be done easily with array_walk?
I think this might also encourge people to use extremly long query
strings, which will break when it gets to a certain length. I
believe, off hand, 255 bytes is what is suggested max length for a
query string.
Curt
"I used to think I was indecisive, but now I'm not so sure."
Can this not be done easily with array_walk?
Yes, though the primary purpose here is to have a method to create a
form-encoded query string internally, exporting it to userspace is just a
"why the heck not" side-effect.
I think this might also encourge people to use extremly long query
strings, which will break when it gets to a certain length. I
believe, off hand, 255 bytes is what is suggested max length for a
query string.
For HTTP/1.0 GET query_strings yes (2048 bytes for HTTP/1.1 GET), but for
POST data (which uses the same form encoding) the length of the query string
is not limited.
Note: I don't have a great deal invested in this, if there's no desire to
use this my heart won't be broken.
-Sara
- Thus wrote Sara Golemon (pollita@php.net):
Can this not be done easily with array_walk?
Yes, though the primary purpose here is to have a method to create a
form-encoded query string internally, exporting it to userspace is just a
"why the heck not" side-effect.
Ahh.. ok.
I think this might also encourge people to use extremly long query
strings, which will break when it gets to a certain length. I
believe, off hand, 255 bytes is what is suggested max length for a
query string.For HTTP/1.0 GET query_strings yes (2048 bytes for HTTP/1.1 GET), but for
POST data (which uses the same form encoding) the length of the query string
is not limited.
I did have a feeling 255 was a bit small, thanks for clarifying
that for me.
Note: I don't have a great deal invested in this, if there's no desire to
use this my heart won't be broken.
My second thought was to perhaps apply this to urlencode so
urlencode would be defined as:
string urlencode(mixed expression)
Although this sort undefines what exacly urlencode does and might
lead to even more confusion.
Curt
"I used to think I was indecisive, but now I'm not so sure."