web-dev-qa-db-fra.com

Encodage d'URL entre guillemets et espaces

J'ai du texte de requête qui est encodé avec JavaScript, mais j'ai rencontré un cas d'utilisation où je pourrais avoir à encoder le même texte côté serveur, et l'encodage qui se produit n'est pas le même. J'ai besoin que ce soit pareil. Voici un exemple.

J'entre "I like food" Dans la boîte de recherche et je clique sur le bouton search. JavaScript l'encode comme %22I%20like%20food%22

Disons que j'obtiens la même valeur qu'une chaîne sur un objet de requête côté serveur. Cela ressemblera à ceci: "\"I like food\""

Lorsque j'utilise HttpUtility.UrlEncode(value), le résultat est "%22I+like+food%22". Si j'utilise HttpUtility.UrlPathEncode(value), le résultat est "\"I%20like%20food\""

Donc UrlEncode encode mes guillemets mais utilise le caractère + Pour les espaces. UrlPathEncode encode mes espaces mais n'encode pas mes guillemets échappés.

J'en ai vraiment besoin pour faire les deux, sinon le code de recherche me bouscule complètement (et je n'ai aucun contrôle sur le code de recherche).

Conseils?

28
Samo

UrlPathEncode n'échappe pas " car il n'est pas nécessaire de les échapper dans les composants de chemin.

Uri.EscapeDataString devrait faire ce que vous voulez.

54
porges

Plusieurs options s'offrent à vous, la plus rapide peut être d'utiliser UrlEncode puis de faire un string.replace pour échanger le + caractères avec %20.

Quelque chose comme

HttpUtility.UrlEncode(input).Replace("+", "%20");
9
Mitchel Sellers