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 ?
Réponses
Trop de publicités?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);
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");
}
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) {.......});