Caractère "+" (%2b) dans une url

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 - 12 oct. 2005 à 18:44
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 - 13 oct. 2005 à 00:02
Bonjour à tous :)

J'ai un problème pour récuperer un numéro de teléphone passer dans l'url de mon GET :

page.aspx?P1=%2b33123456789

J'ai essayé avec urldecode de server et de httpwebutility ca marche pas ...

Quand je fais :


Server.UrlDecode(Server.UrlEncode("+33123456789"))


"�盟蹺"

Et


System.Web.HttpUtility.UrlDecode(System.Web.HttpUtility.UrlEncode("+33123456789"))


"+33123456789"

1. Quel est la difference entre les deux UrlEncode des deux classes différentes ?
2. Si je fait la méthode deux à partir de ce que j'ai dans l'url ca marche pas, une solution ?


System.Web.HttpUtility.UrlDecode(Request.QueryString["P1"])

"�볗븸"

Merci

7 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 oct. 2005 à 19:06
Pour la difference entre les 2 classes si tu regardes dans reflector, tu vois que


Server est en fait un httpServerUtility


public HttpServerUtility Server
{
get
{
if (this._server == null)
{
this._server = new HttpServerUtility(this);
}
return this._server;
}
}


et HttpServerUtility.UrlEncode vaut


public string UrlEncode(string s)
{
Encoding encoding1 = (this._context != null) ? this._context.Response.ContentEncoding : Encoding.UTF8;
return HttpUtility.UrlEncode(s, encoding1);
}

la difference c'est que Server.UrlEncode prend en compte l'encoding de la response ... mais l'encoding c'est pas mon fort ...



Par contre moi Server.UrlDecode(Server.UrlEncode("+33123456789")) me retourne bien +33123456789
c'est ca qui me parait bizarre :/ t'as un os francais ? avec un thread de culture francaise ?

Sinon moi quand j'ai

page.aspx?p=%2B33

et que je fais un response.write(request.querystring["p"]) le paramètre est deja décodé (et heureusement) donc pas besoin de décoder un querystring ...

la seule chose qu'il faut faire gaffe c'est que le + dans l'urlencode soit bien encodé, en effet le plus correspond à un espace ...



<HR>



Cyril - MVS - MCP ASP
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
12 oct. 2005 à 19:15
Quand je fais çà :

System.Web.HttpUtility.UrlDecode(System.Web.HttpUtility.UrlEncode("+33123456789"))


"+33123456789"

Ca marche pour moi aussi , d'ou mon incomprehension.

Et si je fais çà :

System.Web.HttpUtility.UrlDecode(Request.QueryString["P1"])

"�볗븸"

ou çà :

Response.Write(Request.QueryString["P7"]
)
J'obtiens du chinois.

::|The S@ib|::
MVP C#.NET
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 oct. 2005 à 19:25
jamais vu ca :s

en mettant ?p=336
ou ?p=33%2B6

ca fait toujours du chinois ?

Sinon si t'y vas en debug ca te dit quoi ? request.querystring("p") en debug ils mettent aussi du chinois ?

et enfin dans request.url en debug t'as des choses normales ?

si tu forces l'encoding en faisant

Response.ContentEncoding = System.Text.
Encoding.UTF8;

ca dit quoi ?


<HR>
Cyril - MVS - MCP ASP
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
12 oct. 2005 à 19:27
D'ailleurs quand je test çà :


Request.QueryString["P6"].Length , il me donne 4 au lieu de 12

::|The S@ib|::
MVP C#.NET
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
12 oct. 2005 à 19:31
Forcer l'encoding marche pas.

En debug j'ai du chinois

Dans URL j'ai correctement ma %2b0123456789

En passant 33%2b123456789 dans l'url ca me donne : 33 et du chinois

En passant 33123456789 ca me donne 33123456789

Quel merde ....

::|The S@ib|::
MVP C#.NET
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 oct. 2005 à 20:19
oula, du chinois en debug :s meme dans request.url ? c pas bon signe ca :s


en forcant le thread ?


Thread.CurrentThread.CurrentCulture =
New CultureInfo("fr-fr",
True)
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture



la requete :


Request.ContentEncoding = System.Text.Encoding.ASCII



sinon en faisant un peu de bidouille genre

page.aspx?p=<%=urlencode(urlencode("+331234"))%>

Le plus chiant c'est que moi j'ai pas la meme chose, donc surement du à un problème de configuration matériel :s t'as essayé sur une autre machine ?



<HR>



Cyril - MVS - MCP ASP
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
13 oct. 2005 à 00:02
Même problème sur 3 machines differentes. Ce n'est pas un problème de config.

Je passe çà dans l'url:


&P4=NS&P5=NS&P6=&P7=%2b3314256985&P8=80100&P9=234&P10=15

Et je me retrouve avec des Carrés / signes

::|The S@ib|::
MVP C#.NET
0
Rejoignez-nous