一、问题
关联数组中某一元素的键名为 notify_url,使用 http_build_query() 后输出结果跟预期不一致,如下:
$data = array(
'version' => '10',
'notify_url' => 'http://www.demo.com/notify',
'create_time' => time()
);
echo http_build_query($data);
输出结果:
version=10¬ify_url=http%3A%2F%2Fwww.demo.com%2Fnotify&create_time=1635924906
可以看到 ¬ 变成了 ¬,原因是 ¬ 被浏览器解释为 HTML 实体,尽管它缺少后缀分号。
二、解决
2.1、方法一
需要把 ¬ 转换成 ¬,PHP 的 htmlentities() 函数可以将特殊字符转换为 HTML 实体
$data = array(
'version' => '10',
'notify_url' => 'http://www.demo.com/notify',
'create_time' => time()
);
$str = http_build_query($data);
echo htmlentities($str);
2.2、方法二
$str = "";
foreach ($arr as $k => $v) {
$str .= $k . "=" .$v . "&";
}
$str = htmlspecialchars_decode($str);
2.3、方法三
$str = http_build_query($param, null, '&');
$str = htmlspecialchars_decode($str);