http_build_query()根据某些RFC标准,有没有一种方法可以使用URL编码?
为什么我不想对所有内容进行URL编码:我正在查询Ebay API ..他们诚实地坚持参数名称不是URL编码,就括号中的逗号而言.例如,DomainName(0)是一个参数,如果这些parens被编码,则查询失败.
不,它似乎总是想要编码(它应该是,它在构建URL的参数列表时用于URL编码).
你可以做自己的......
$params = array('a' => 'A', 'b' => 'B');
$paramsJoined = array();
foreach($params as $param => $value) {
$paramsJoined[] = "$param=$value";
}
$query = implode('&', $paramsJoined);
Run Code Online (Sandbox Code Playgroud)
PHP 5.3.1(错误行为)
http_build_query DOES逃脱加入参数"&"号字符.示例:user_id=1&setting_id=2.
PHP 5.4+
http_build_query 不会转义连接参数的'&'&符号.例:user_id=1&setting_id=2
例:
$params = array(
'user_id' => '1',
'setting_id' => '2'
);
echo http_build_query($params);
// Output for PHP 5.3.1:
user_id=1&setting_id=2 // NOTICE THAT: '&' character is escaped
// Output for PHP 5.4.0+:
user_id=1&setting_id=2 // NOTICE THAT: '&' character is NOT escaped
Run Code Online (Sandbox Code Playgroud)
选项#1:编写包装函数:
/**
* This will work consistently and will never escape the '&' character
*/
function buildQuery($params) {
return http_build_query($params, '', '&');
}
Run Code Online (Sandbox Code Playgroud)
选项#2:抛弃http_build_query函数并编写自己的函数.
| 归档时间: |
|
| 查看次数: |
87638 次 |
| 最近记录: |