252 votes

URL Encode une chaîne en jQuery pour une requête AJAX

Je mets en œuvre la recherche instantanée de Google dans mon application. Je tiens à déclencher des requêtes HTTP comme tapés par l’utilisateur dans la saisie de texte. Le seul problème que je rencontre est que lorsque l’utilisateur bénéficie d’un espace entre le prénom et le nom, l’espace n’est pas codé comme un +, brisant ainsi la recherche. Comment puis-je remplacer soit l’espace avec un +, ou juste en toute sécurité URL coder la chaîne ?

547voto

Anders Fjeldstad Points 5095

Essayez encodeURIComponent.

Encode un Identificateur de Ressource Uniforme (URI) de la composante en remplaçant chaque occurrence de certains caractères par un, deux, trois, ou quatre séquences d'échappement qui représente le codage UTF-8 du caractère (quatre séquences d'échappement pour les caractères composé de deux "mère porteuse" caractères).

Exemple:

var encoded = encodeURIComponent(str);

26voto

Praveen04 Points 138

encodeURIComponent fonctionne très bien pour moi. Nous pouvons donner l’url comme ceci en appel ajax. Le code ci-dessous :

10voto

StackOverFlow Points 792

Meilleure façon:

encodeURIComponent échappe à tous les caractères, sauf les suivantes: alphabetic, decimal digits, - _ . ! ~ * ' ( )

Pour éviter les imprévus demandes vers le serveur, vous devez appeler encodeURIComponent sur toute saisie par l'utilisateur paramètres qui seront passés dans le cadre d'un URI. Par exemple, un utilisateur de type "Thym &time=nouveau" pour une variable commentaire. Pas à l'aide de encodeURIComponent sur cette variable va donner de commentaire=Thym%20&time=de nouveau. Notez que le symbole et le signe égal marque une nouvelle clé et une valeur paire. Donc au lieu d'avoir un POST de commentaire clé, qui est égale à "Thym &time=nouveau", vous avez deux POSTES clés, à l'égal de "Thym" et une autre " (le temps) égal à nouveau.

Pour l'application/x-www-form-urlencoded (POST), par http://www.w3.org/TR/html401/interac...m-content-typeles espaces sont remplacés par des '+', de sorte que l'on désire suivre un encodeURIComponent de remplacement avec un supplément de remplacement de "%20" avec un "+".

Si l'on souhaite être plus strictes en respectant la RFC 3986 (qui réserve !, ', (, ), et *), même si ces personnages n'ont pas officialisé URI délimitant les utilisations, les éléments suivants peuvent être utilisés en toute sécurité:

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}

5voto

d1jhoni1b Points 1110

Je suis l'aide de MVC3/EntityFramework en tant que back-end, front-end consomme tous mes contrôleurs de projet via jquery, les publier directement (à l'aide de $.post) ne marche pas besoin de données encription, lorsque vous passez des paramètres directement autres que les URL sont codées en dur. Je l'ai déjà testé plusieurs caractères, j'ai même envoyé un URL(celui-ci http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1) en tant que paramètre et n'avait pas de problème même si encodeURIComponent fonctionne très bien quand vous transmettre toutes les données dans l'URL (codé en dur)

Codé en dur URL c'est à dire>

 var encodedName = encodeURIComponent(name);
 var url = "ControllerName/ActionName/" + encodedName + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;; // + name + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;

Sinon, ne pas utiliser encodeURIComponent et au lieu d'essayer de passer les paramètres au sein de l'ajax méthode post

 var url = "ControllerName/ActionName/";   
 $.post(url,
        { name: nameVal, fkKeyword: keyword, description: descriptionVal, linkUrl: linkUrlVal, includeMetrics: includeMetricsVal, FKTypeTask: typeTask, FKProject: project, FKUserCreated: userCreated, FKUserModified: userModified, FKStatus: status, FKParent: parent },
 function (data) {.......});

0voto

genesis Points 32591
A elle seule.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X