fix($location): handle plus character in query strings

Closes #3042
This commit is contained in:
Carlo s A. Guillen
2014-07-17 14:47:14 -07:00
committed by Brian Ford
parent c20d438ac9
commit 3f4ee15139
2 changed files with 13 additions and 1 deletions

View File

@@ -1099,7 +1099,7 @@ function parseKeyValue(/**string*/keyValue) {
var obj = {}, key_value, key;
forEach((keyValue || "").split('&'), function(keyValue) {
if ( keyValue ) {
key_value = keyValue.split('=');
key_value = keyValue.replace(/\+/g,'%20').split('=');
key = tryDecodeURIComponent(key_value[0]);
if ( isDefined(key) ) {
var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;

View File

@@ -323,6 +323,18 @@ describe('$location', function() {
expect(url.search()).toEqual({'i j': '<>#'});
expect(url.hash()).toBe('x <>#');
});
it('should decode pluses as spaces in urls', function() {
url = new LocationHtml5Url('http://host.com/');
url.$$parse('http://host.com/?a+b=c+d');
expect(url.search()).toEqual({'a b':'c d'});
});
it('should retain pluses when setting search queries', function() {
url.search({'a+b':'c+d'});
expect(url.search()).toEqual({'a+b':'c+d'});
});
});
});