http_build_query() 不带 url 编码
有没有办法在不根据某些RFC标准进行URL编码的情况下使用?http_build_query()
为什么我不想对所有内容进行URL编码:我正在查询Ebay API。他们诚实地坚持参数名称不是URL编码的,只要括号中的逗号。例如,DomainName(0) 是一个参数, 如果这些 parens 被编码, 查询将失败。
有没有办法在不根据某些RFC标准进行URL编码的情况下使用?http_build_query()
为什么我不想对所有内容进行URL编码:我正在查询Ebay API。他们诚实地坚持参数名称不是URL编码的,只要括号中的逗号。例如,DomainName(0) 是一个参数, 如果这些 parens 被编码, 查询将失败。
PHP 5.3.1(Buggy Behavior)http_build_query确实会转义连接参数的“&”字符。例:。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
选项 #1:编写一个包装函数:
/**
* This will work consistently and will never escape the '&' character
*/
function buildQuery($params) {
return http_build_query($params, '', '&');
}
选项 #2:抛弃http_build_query函数,编写自己的函数。