Personnages spéciaux dans routeparams exécutant le contrôleur deux fois en angularjs

Comment puis-je passer un mot-clé (contenant des caractères spéciaux) comme une application $ routeParam to AngularJS?

$routeProvider.when('/search/:keyword', {templateUrl:'someURL', controller:SearchCtrl})

Ce mot-clé peut contenir des caractères spéciaux.

Donc, j'ai encodingURIComponent au "mot-clé" avant de rediriger vers cette page.

Lorsque ce "mot-clé" comporte des caractères spéciaux tels que "$, @, & comma", etc., le contrôleur s'exécute deux fois.

EX: si le mot-clé possède un symbole '$', le contrôleur

  • Exécute le 1er avec la forme codée de ce symbole (# / search /% 24)
  • Exécute le 2ème avec le symbole réel (# / search / $)

Cela n'arrive pas dans le cas du symbole carat ('^').

Est-ce que je manque quelque part ou mon approche est incorrecte?

En utilisant une solution de rechange pour faire face à ce type de scénario:

 utils.encodeUriQuery = function (val) { return encodeURIComponent(val). replace(/%40/gi, '@'). replace(/%3A/gi, ':'). replace(/%24/g, '$'). replace(/%2C/gi, ','). replace(/%26/gi, '&'). replace(/%3D/gi, '='). replace(/%2B/gi, '+'); } 

Appel de la fonction ci-dessus avant de passer le mot-clé de recherche à l'URL

 $window.location.href = "/#/search/" + utils.encodeUriQuery(searchKeyword); 

REMARQUE: utils est une usine.