从
PHP Manual:
Dots and spaces in variable names are converted to underscores. For example becomes $_REQUEST["a_b"].
所以,这是不可能的. parse_str()会将所有句点转换为下划线.如果您确实无法避免在查询变量名中使用句点,则必须编写自定义函数来实现此目的.
以下函数(取自this answer)将查询字符串中每个键值对的名称转换为其对应的十六进制形式,然后对其执行parse_str().然后,他们又恢复原状.这样,期间不会被触及:
function parse_qs($data)
{
$data = preg_replace_callback('/(?:^|(?<=&))[^=[]+/', function($match) {
return bin2hex(urldecode($match[0]));
}, $data);
parse_str($data, $values);
return array_combine(array_map('hex2bin', array_keys($values)), $values);
}
用法示例:
$data = parse_qs($_SERVER['QUERY_STRING']);