6
votes

Angularjs Comment les composants URI sont codés

J'attendais des paramètres de chaîne de requête à l'aide de la fonction JavaScript standard Encodonquonent . Selon le test suivant, ce n'est pas le cas: xxx

Le test échoue avec l'erreur suivante:

$ http codes URI Composants correctement
ERREUR: Demande inattendue: Obtenez /API/Process?Data=hello+From+Http:%2f%2fexample.com
Attendu Obtenez /API/Process?Data=hello%20From%20HTTP%3A%2F%2FEXAMSAMT.COM

à résumer:

  • Codage attendu: Bonjour% 20From% 20http% 3A% 2F% 2fexample.com
  • codage réel: Hello + de + http:% 2f% 2fexample.com

    Quel composant URI (paramètres de la chaîne de requête AKA) devrais-je m'attendre avec angularjs?


0 commentaires

3 Réponses :


-3
votes

Il semble que lorsque vous passez les paramètres pré-codant. Vous encodez l'URL mais après avoir passé une URL non codée via le paramètre de données JSON. Peut-être que cette modification de votre code fonctionnera. XXX

Aussi, après avoir pris uniquement la pièce de codage d'URL et la placer à l'intérieur d'un violon: http://jsfiddle.net/entgl/1/

Il apparaît Pour fonctionner correctement, vous voudrez peut-être enquêter sur des facteurs externes, ce qui entraîne la question avec votre URL. Il existe également plusieurs autres options décrites ici dans ce

Encodage URL en JavaScript?


3 commentaires

Bonjour - Je passe le paramètre pré-codant parce que je m'attends à Angularjs (le cadre JS que j'utilise ici) pour le faire pour moi. Et ça fait. Mais d'une certaine manière, je ne m'y attends pas. Il ne fait pas l'encodage dans la fonction Encodéturicomponent . Ma question est spécifique à angularjs.


S'il vous plaît essayez de pré-codage par mon code ci-dessus. Effectuez les changements suivants à cette ligne. var données = Encodégonposant ('Hello de exemple.com' );


Je ne peux pas m'encédoyer les données que je passe dans le cadre de la communication du serveur. Selon la documentation, la fonction http devrait le faire de manière transparente. Et cela le fait en fait correcté. Mon problème concerne principalement les tests, comme dans le test de jasmine, j'ai inclus dans ma question. Le pré-codage dans mon code n'est pas acceptable.



4
votes

Angular (au moins 1.3) n'utilise pas uniquement de codéuricomponent et change quelques remplaçants (comme "" "sur" + ").

C'est la commission expliquant pourquoi: https://github.com/angular/angular.js/commit/9e30baad3fdc82fb2f20f4ba29e p>

Et voici ce que vous pouvez voir dans 1.3 Sources: P>

decodeURIComponent(val.
             replace('@', '%40').
             replace(':', '%3A').
             replace('$', '%24').
             replace(',', '%2C').
             replace(';', '%3B').
             replace('+', '%20'));


1 commentaires

Pouvons-nous y accéder en quelque sorte comme angular.encodétructrique ou quelque chose?



4
votes

Dans mon humble avis angularjs est encodé à tort de la même manière des segments de chemin URI et des paramètres de requête URI. Pour moi, c'est un bug et j'ai réellement émis un Demande de tir pour la fixer.

Le test que j'ai introduit dans la requête de traction confirme ce bogue (Testé-le avec les deux angularjs 1.3. * et actuel maître ).


0 commentaires