http_build_query() 不带 url 编码

2022-08-30 08:28:42

有没有办法在不根据某些RFC标准进行URL编码的情况下使用?http_build_query()

为什么我不想对所有内容进行URL编码:我正在查询Ebay API。他们诚实地坚持参数名称不是URL编码的,只要括号中的逗号。例如,DomainName(0) 是一个参数, 如果这些 parens 被编码, 查询将失败。


答案 1

您可以在从中获取的结果字符串上使用urldecode()函数http_build_query()


答案 2

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函数,编写自己的函数。


推荐