http_build_query的意外输出(&=>¶ms)

时间:2018-09-22 00:12:45

标签: php

尝试在url中发送以下数组:

$params = [
    'a' => 'x',
    'b' => 'y'
];
$url = http_build_query(['params' => $params]);
echo urldecode($url);

我期望得到以下输出:

params[a]=x&params[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&params%5Bb%5D=y"
string(62) "706172616d73253542612535443d7826706172616d73253542622535443d79"
string(23) "params[a]=x&params[b]=y"
string(46) "706172616d735b615d3d7826706172616d735b625d3d79"

1 个答案:

答案 0 :(得分:2)

您在这里看到的是正确的

params[a]=x¶ms[b]=y

&para 

代表特殊字符

因此

&params 

变成

¶ms

如果您仍然希望以如下方式对回声进行小的更改,就可以看到它

echo str_replace('&','<span>&</span>',urldecode($url)).'</code>';