1
- module . exports = function http_build_query ( formdata , numericPrefix , argSeparator ) { // eslint-disable-line camelcase
1
+ module . exports = function http_build_query ( formdata , numericPrefix , argSeparator , encType ) { // eslint-disable-line camelcase
2
2
// discuss at: http://locutus.io/php/http_build_query/
3
3
// original by: Kevin van Zonneveld (http://kvz.io)
4
4
// improved by: Legaev Andrey
@@ -9,14 +9,28 @@ module.exports = function http_build_query (formdata, numericPrefix, argSeparato
9
9
// input by: Dreamer
10
10
// bugfixed by: Brett Zamir (http://brett-zamir.me)
11
11
// bugfixed by: MIO_KODUKI (http://mio-koduki.blogspot.com/)
12
+ // improved by: Will Rowe
12
13
// note 1: If the value is null, key and value are skipped in the
13
14
// note 1: http_build_query of PHP while in locutus they are not.
14
15
// example 1: http_build_query({foo: 'bar', php: 'hypertext processor', baz: 'boom', cow: 'milk'}, '', '&')
15
16
// returns 1: 'foo=bar&php=hypertext+processor&baz=boom&cow=milk'
16
17
// example 2: http_build_query({'php': 'hypertext processor', 0: 'foo', 1: 'bar', 2: 'baz', 3: 'boom', 'cow': 'milk'}, 'myvar_')
17
18
// returns 2: 'myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&php=hypertext+processor&cow=milk'
19
+ // example 3: http_build_query({foo: 'bar', php: 'hypertext processor', baz: 'boom', cow: 'milk'}, '', '&', 'PHP_QUERY_RFC3986')
20
+ // returns 3: 'foo=bar&php=hypertext%20processor&baz=boom&cow=milk'
18
21
19
- var urlencode = require ( '../url/urlencode' )
22
+ var encodeFunc
23
+
24
+ switch ( encType ) {
25
+ case 'PHP_QUERY_RFC3986' :
26
+ encodeFunc = require ( '../url/rawurlencode' )
27
+ break
28
+
29
+ case 'PHP_QUERY_RFC1738' :
30
+ default :
31
+ encodeFunc = require ( '../url/urlencode' )
32
+ break
33
+ }
20
34
21
35
var value
22
36
var key
@@ -39,7 +53,7 @@ module.exports = function http_build_query (formdata, numericPrefix, argSeparato
39
53
}
40
54
return tmp . join ( argSeparator )
41
55
} else if ( typeof val !== 'function' ) {
42
- return urlencode ( key ) + '=' + urlencode ( val )
56
+ return encodeFunc ( key ) + '=' + encodeFunc ( val )
43
57
} else {
44
58
throw new Error ( 'There was an error processing for http_build_query().' )
45
59
}
0 commit comments