尝试在url中发送以下数组:
$params = [
'a' => 'x',
'b' => 'y'
];
$url = http_build_query(['params' => $params]);
echo urldecode($url);
我期望得到以下输出:
params[a]=x¶ms[b]=y
但是我得到的却是这个:
params[a]=x¶ms[b]=y
我也尝试过:
http_build_query(['params' => $params], '', '&');
http_build_query(['params' => $params], null, '&', PHP_QUERY_RFC3986);
http_build_query(['params' => $params], null, ini_get('arg_separator.output'), PHP_QUERY_RFC3986);
和:
$params = [
'params[a]' => 'x',
'params[b]' => 'y'
];
但是我一直得到相同的输出。我做错了什么吗?是我的服务器吗? (Apache / 2.4.33-Unix-PHP / 7.2.6)
以下@Sammitch建议:
var_dump($url, bin2hex($url), urldecode($url), bin2hex(urldecode($url)));
输出:
string(31) "params%5Ba%5D=x¶ms%5Bb%5D=y"
string(62) "706172616d73253542612535443d7826706172616d73253542622535443d79"
string(23) "params[a]=x¶ms[b]=y"
string(46) "706172616d735b615d3d7826706172616d735b625d3d79"
答案 0 :(得分:2)
您在这里看到的是正确的
params[a]=x¶ms[b]=y
为
¶
代表特殊字符
¶
因此
¶ms
变成
¶ms
如果您仍然希望以如下方式对回声进行小的更改,就可以看到它
echo str_replace('&','<span>&</span>',urldecode($url)).'</code>';