diff --git a/lib/querystring.js b/lib/querystring.js index 58b90250c4..d709c07fdf 100644 --- a/lib/querystring.js +++ b/lib/querystring.js @@ -170,9 +170,17 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq) { } qs.split(sep).forEach(function(kvp) { - var x = kvp.split(eq); - var k = QueryString.unescape(x[0], true); - var v = QueryString.unescape(x.slice(1).join(eq), true); + var x = kvp.split(eq), k, v, useQS=false; + try { + if (kvp.match(/\+/)) { // decodeURIComponent does not decode + to space + throw "has +"; + } + k = decodeURIComponent(x[0]); + v = decodeURIComponent(x.slice(1).join(eq) || ""); + } catch(e) { + k = QueryString.unescape(x[0], true); + v = QueryString.unescape(x.slice(1).join(eq), true); + } if (!hasOwnProperty(obj, k)) { obj[k] = v;