http-build-query将数组转化为查询字符串以及可能遇到的转义问题
将数组转化为查询字符串
在PHP中,可以使用内置的“http_build_query()”函数将数组转为url参数。“http_build_query()”函数是php5加入的,作用是把数组或对象转换成url参数,生成一个经过“URL-encode”的请求字符串。
$data = array(
'foo' => 'bar',
'baz' => 'boom',
'cow' => 'milk',
'php' => 'hypertext processor'
);
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');
?>
输出结果:
foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&baz=boom&cow=milk&php=hypertext+processor
http_build_query()函数介绍
http_build_query()函数的作用是使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。
这个有什么用呢,这是模拟http请求的,把得到的数据data通过函数URL-encode,一般是用在回调。
转义会遇到的问题
比如如下案例:
$commonParams = [
'g_tk' => 5381,
'loginUin' => 0,
'notice' => 0,
'needNewCode' => 0
];
echo http_build_query($commonParams);
那么,这时候打印得到的结果(第一行是实际打印得到的结果):
g_tk=5381&loginUin=0¬ice=0&needNewCode=0
// 以下是要的 与上一行不同!
g_tk=5381&loginUin=0¬ice=0&needNewCode=0
可见,它转化的时候将¬转化为了¬!
如果要得到正确的结果,就需要再进行一次转义:
$queryStr = http_build_query($commonParams);
$queryStr = htmlspecialchars($queryStr);
echo $queryStr;
这样最终得到的结果就是正确的:
g_tk=5381&loginUin=0¬ice=0&needNewCode=0