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

Signaler
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
-
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
-
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

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
22
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
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
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
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
22
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
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
D'ailleurs quand je test çà :


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

::|The S@ib|::
MVP C#.NET
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
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
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
22
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
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
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