Prevent url encoding in AngularJS route

Currently, when I pass my query string into the search() method of $location, my query string is uri encoded

Example

$location.path('/some_path').search({'ids[]': 1})

becomes

http://some_url/some_path?ids%5B%5D=1

I wonder if there's a way to get around this?

Answers


The problem is that .search() uses encodeUriQuery that internally uses encodeURIComponent and this function escapes all characters except the following: alphabetic, decimal digits, - _ . ! ~ * ' ( )

The current function inside Angular's source code:

/**
 * This method is intended for encoding *key* or *value* parts of query component. We need a custom
 * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
 * encoded per http://tools.ietf.org/html/rfc3986:
 *    query       = *( pchar / "/" / "?" )
 *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
 *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
 *    pct-encoded   = "%" HEXDIG HEXDIG
 *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
 *                     / "*" / "+" / "," / ";" / "="
 */
function encodeUriQuery(val, pctEncodeSpaces) {
  return encodeURIComponent(val).
             replace(/%40/gi, '@').
             replace(/%3A/gi, ':').
             replace(/%24/g, '$').
             replace(/%2C/gi, ',').
             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
}

If that function had this additional replaces, then the brackets will keep unencoded:

replace(/%5B/gi, '[').
replace(/%5D/gi, ']').

Need Your Help

MySQL PDO - $sth->fetch() returns FALSE, but only the second time?

php mysql oop pdo

The following is a code snippet of my application. Bear in mind that I am very, very new to PDO (as in, started figuring it out today) so I'm a bit confused.

Jquery Datepicker onselect call function

javascript jquery html jquery-ui datepicker

This is a function I need to call when my JQuery date picker selects both to and from dates: