En .Net 4.5+, utilisez WebUtility
Juste pour le formatage, je soumets ceci comme une réponse.
Je n'ai pas pu trouver de bons exemples les comparant ainsi :
string testString = "http://test# space 123/text?var=val&another=two";
Console.WriteLine("UrlEncode: " + System.Web.HttpUtility.UrlEncode(testString));
Console.WriteLine("EscapeUriString: " + Uri.EscapeUriString(testString));
Console.WriteLine("EscapeDataString: " + Uri.EscapeDataString(testString));
Console.WriteLine("EscapeDataReplace: " + Uri.EscapeDataString(testString).Replace("%20", "+"));
Console.WriteLine("HtmlEncode: " + System.Web.HttpUtility.HtmlEncode(testString));
Console.WriteLine("UrlPathEncode: " + System.Web.HttpUtility.UrlPathEncode(testString));
//.Net 4.0+
Console.WriteLine("WebUtility.HtmlEncode: " + WebUtility.HtmlEncode(testString));
//.Net 4.5+
Console.WriteLine("WebUtility.UrlEncode: " + WebUtility.UrlEncode(testString));
Sorties :
UrlEncode: http%3a%2f%2ftest%23+space+123%2ftext%3fvar%3dval%26another%3dtwo
EscapeUriString: http://test#%20space%20123/text?var=val&another=two
EscapeDataString: http%3A%2F%2Ftest%23%20space%20123%2Ftext%3Fvar%3Dval%26another%3Dtwo
EscapeDataReplace: http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo
HtmlEncode: http://test# space 123/text?var=val&another=two
UrlPathEncode: http://test#%20space%20123/text?var=val&another=two
//.Net 4.0+
WebUtility.HtmlEncode: http://test# space 123/text?var=val&another=two
//.Net 4.5+
WebUtility.UrlEncode: http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo
En .Net 4.5+, utilisez WebUtility
.UrlEncode
Cela semble reproduire HttpUtility.UrlEncode
(pré-v4.0) pour les caractères les plus courants :
Uri.EscapeDataString(testString).Replace("%20", "+").Replace("'", "%27").Replace("~", "%7E")
Note : EscapeUriString
conservera une chaîne uri valide, ce qui l'amènera à utiliser autant de caractères en clair que possible.
Voir cette réponse pour un tableau comparant les différents encodages :
https://stackoverflow.com/a/11236038/555798
Sauts de ligne Tous ceux qui sont énumérés ici (autres que HttpUtility.HtmlEncode
) convertira "\n\r"
sur %0a%0d
ou %0A%0D
N'hésitez pas à modifier cet article et à ajouter de nouveaux caractères à ma chaîne de test, ou laissez-les dans les commentaires et je le modifierai.
0 votes
Pourriez-vous montrer comment vous effectuez l'appel vers le site web ? Peut-être qu'il y a quelque chose à faire ici.
0 votes
Par curiosité, comment appeler un site Web pour obtenir des données sans utiliser System.Web ?
0 votes
@Patrick, il utilise probablement
WebRequest
ouWebClient
. C'est la raison pour laquelle j'ai posé des questions sur ce code particulier, car il y a des choses qui peuvent être faites pour encoder correctement les données url.1 votes
J'utilise un objet System.Net.WebRequest. Ensuite, j'appelle GetRequestStream et j'écris mes paramètres de post dans le flux. Je fixe également le ContentType à "application/x-www-form-urlencoded".
1 votes
Bien entendu, cela s'appliquerait également si j'effectuais une requête GET et que j'ajoutais les paramètres à l'URL.