One of the oldest and ugliest relics of the register_globals era of PHP are the fact that all dots in request variable names gets replaced with “_”. If your variable was named “foo.bar”, PHP will serve it to you as “foo_bar”. You cannot turn this off, you cannot use extract() or parse_str() to avoid it and you’re mostly left out in the dark. Luckily the QUERY_STRING enviornment (in _SERVER if you’re running mod_php, etc) contains the raw string, and this string contains the dots.
The following “”parser”” is a work in progress and does currently not support the array syntax for keys that PHP allow, but it solves the issue for regular vars. I will try to extend this later on to do actually replicate the functionality of the regular parser.
Here’s the code. No warranties. Ugly hack. You’re warned. Leave a comment if you have any good suggestions regarding this (.. or know of an existing library doing the same..).
function http_demolish_query($queryString)
{
$result = array();
$segments = explode("&", $queryString);
foreach($segments as $segment)
{
$parts = explode('=', $segment);
$key = urldecode(array_shift($parts));
$value = null;
if ($parts)
{
$value = urldecode(join('=', $parts));
}
$result[$key] = $value;
}
return $result;
}
(OK, that’s not the real function name, but it’s aptly named to be the nemesis of http_build_query)