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?
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.
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");