diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-01-28 16:16:09 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2014-04-01 23:02:34 +0200 |
commit | 268206cec55921d2d0309469ebd5d9533e4f79ee (patch) | |
tree | 66459e8c136f015e5118651069f1531e35edf10b /core/js/js.js | |
parent | d762e25cc55130e25eba0900c821b36e0897e478 (diff) | |
download | nextcloud-server-268206cec55921d2d0309469ebd5d9533e4f79ee.tar.gz nextcloud-server-268206cec55921d2d0309469ebd5d9533e4f79ee.zip |
Fixed parseQueryString to handle empty values and plus signs
- now correctly parse query strings with '+' signs
- empty values are now parsed either as null or empty string
- added unit test for parseQueryString()
Diffstat (limited to 'core/js/js.js')
-rw-r--r-- | core/js/js.js | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/core/js/js.js b/core/js/js.js index 302b6b4d9fa..e907db2837e 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -371,6 +371,7 @@ var OC={ */ parseQueryString:function(queryString){ var parts, + pos, components, result = {}, key, @@ -378,12 +379,25 @@ var OC={ if (!queryString){ return null; } - if (queryString[0] === '?'){ - queryString = queryString.substr(1); + pos = queryString.indexOf('?'); + if (pos >= 0){ + queryString = queryString.substr(pos + 1); } - parts = queryString.split('&'); + parts = queryString.replace(/\+/g, '%20').split('&'); for (var i = 0; i < parts.length; i++){ - components = parts[i].split('='); + // split on first equal sign + var part = parts[i] + pos = part.indexOf('='); + if (pos >= 0) { + components = [ + part.substr(0, pos), + part.substr(pos + 1) + ] + } + else { + // key only + components = [part]; + } if (!components.length){ continue; } @@ -391,8 +405,14 @@ var OC={ if (!key){ continue; } - value = components[1]; - result[key] = value && decodeURIComponent(value); + // if equal sign was there, return string + if (components.length > 1) { + result[key] = decodeURIComponent(components[1]); + } + // no equal sign => null value + else { + result[key] = null; + } } return result; }, |