IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

UrlEncode / UrlDecode: mauvais encodage décodage?


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut UrlEncode / UrlDecode: mauvais encodage décodage?
    Salut!

    Voila je me retrouve devant un truc incroyable... Je passe dans une url, une adresse postale, que j'ai au préalable UrlEncodé.

    L'adresse en question: 28 Rue de Châteaudun, 75009 Paris, France
    Une fois encodé, le résulats doit donc être: 28+Rue+de+Ch%E2teaudun%2C+75009+Paris%2C+France
    (Et oui, .net considère les '+' comme des ' ', mais ce n'est pas un soucis).

    En javascript, pas de soucis, en php pas de soucis, mais en C#.NET le résultats devient:
    28+Rue+de+Ch%c3%a2teaudun%2c+75009+Paris%2c+France

    .Net craque complètement sur le caractères â...

    J'ai tester deux trois chose, et en effet pour .net, â s'encode: %c3%a2. Alors que la norme veut que ce soir %e2.
    Et bien sur le chemin inverse est identique...

    Au final donc lorsque que je récupère mon paramètres venant de l'url, le nom de la rue n'est plus valable car une petit carré (caractère inconnu) remplace de â, et cela avant même que j'ai fait quoi que ce soit puisque notre charmant framework .NET décode lui même l'url...

    J'ai du mal à croire que je puisse être tombé sur un bug, mais je ne comprend absolument pas ce qui se passe avec cette lettre...

    Quelqu'un aurai une idée, ou à déjà était confronté à ce problème?

    (Url Encoding W3C: http://www.w3schools.com/TAGS/ref_urlencode.asp)

    Merci

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Un UrlDecode("28+Rue+de+Ch%c3%a2teaudun%2c+75009+Paris%2c+France")te retourne pas le résultat attendu?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Non c'est l'inverse: un HttpUtility.UrlEncode("28 Rue de Châteaudun, 75009 Paris, France") me retourne: 28+Rue+de+Ch%c3%a2teaudun%2c+75009+Paris%2c+France

    Ce qui n'est pas normale, puisque l'encodage du caractères â est normalement %E2 (et non %c3%a2).

    Le problème que j'ai exactement c'est que mon url j'ai 28+Rue+de+Ch%E2teaudun%2C+75009+Paris%2C+France (ce qui est correct).
    Mais HttpUtility.UrlDecode("28+Rue+de+Ch%E2teaudun%2C+75009+Paris%2C+France") retourne: 28 Rue de Chteaudun, 75009 Paris, France

    Donc il y a un soucis quelque part :/

    Pour résumé, .Net encode la lettre â en %c3%a2, alors qu'il devrai le faire en %e2... et il ne comprend pas %e2 lors du decode...

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    L'url n'est pas encodé en .NET?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Non l'url est encodé depuis un javascript (utilisation de GoogleMaps API).

    Mais je ne comprend pas que .NET encode différent un caractère alors que tout le reste l'encode correctement

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Tu peut essayer avec HtmlEncode / HtmlDecode pour voir

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Et un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HttpUtility.UrlEncode(Convert.ToString("28 Rue de Châteaudun, 75009 Paris, France", new CultureInfo("fr-FR")))
    A mon avis, le code reçoit une chaîne et interprete mal la culture. Si il existe un moyen de préciser l'encodage lors de l'interpretation, essaye le.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Le soucis, c'est que .Net décode l'url tout seul.

    Lorsque que je récupère HttpContext.Current.Request.Path, le â est déjà décodé en un caractères inconnu: Ch�teaudun.

    Théoriquement la Culture ne devrai avoir aucune variance sur le résultats. L'encodage d'url est une norme commune si je ne dis pas de bêtises. Et puisque pour toutes opération nécessitant une culture, .Net prend celle qui a était configuré, et que je suis en fr-FR, je pense que c'est autre chose.

    La méthode HTMLDecode / Encode, ne me renverra pas ce que je recherche, l'encodage html n'ayant rien à voir avec l'encodage URL non ?

  9. #9
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    J'ai un peu de mal à comprendre la succession des évènements. Tu peux préciser et mettre le code qui s'occupe de ces opérations?
    Théoriquement la Culture ne devrai avoir aucune variance sur le résultats
    Ne pas se fier aux apparences. Si le caractère d'une chaine gérée par le code est en conflit avec la culture, le charset, l'encodage, etc. cela peut donner des résultats de ce type.

    De plus, ces méthode admettent un paramètre pour spécifier l'encodage. Il faut chercher du côté de "Encoding.ASCII".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Response.Write(HttpUtility.UrlEncode("28 Rue de Châteaudun, 75009 Paris, France", Encoding.UTF8) + "<br />");
    Response.Write(HttpUtility.UrlEncode("28 Rue de Châteaudun, 75009 Paris, France", Encoding.ASCII) + "<br />");
    Response.Write(HttpUtility.UrlEncode("28 Rue de Châteaudun, 75009 Paris, France", Encoding.Unicode) + "<br />");
    28+Rue+de+Ch%c3%a2teaudun%2c+75009+Paris%2c+France
    28+Rue+de+Ch%3fteaudun%2c+75009+Paris%2c+France
    2%008%00+%00R%00u%00e%00+%00d%00e%00+%00C%00h%00%e2%00t%00e%00a%00u%00d%00u%00n%00%2c%00+%007%005%000%000%009%00+%00P%00a%00r%00i%00s%00%2c%00+%00F%00r%00a%00n%00c%00e%00
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Le soucis c'est que je n'ai pas de code à poster, puisque je ne fait rien sur la chaine en question:

    Un javascript UrlEncode une chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var finder = new RegExp(" ", "g");
    var from = strAddress.replace(finder, "+"); // JS encode les espace en %20, le caractères '+' est plus pratique, est correctement interprété par .Net
    from = escape(from);
    var link = _PRINTLINK.replace(/{FROM}/, from);
    $(_PRINTID).href = link;
    Pour résumé, je construit une URL selon des paramètres JS, que je met tout simplement dans un lien pour accéder à une page.


    Pour le code ASP.NET/C#, je me place dans une IHttpModule, dans laquelle je m'abonne à Context.BeginRequest (on peu imaginer ça directement dans le Global.asax):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }
     
    private void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
     
        if (app != null)
            RewritePath(app);
    }
     
    private void RewritePath(HttpApplication app)
    {
        //app.Request.Path contient mon URL Décodé, avec mon caractère inconnu: Ch?teaudun
    }
    Je n'effectue donc aucune opération coté server, l'url m'arrive directement (mal) décodé.

  11. #11
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Petite confirmation, ton javascript met dans la barre d'adresse ceci: "28+Rue+de+Ch%E2teaudun%2C+75009+Paris%2C+France"?
    Tu veux que ton code .Net décode "28+Rue+de+Ch%E2teaudun%2C+75009+Paris%2C+France" en "28 Rue de Châteaudun, 75009 Paris, France"?

    Scuze mais j'ai un poil de mal à suivre.
    "Winter is coming" (ma nouvelle page d'accueil)

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    C'est exactement ça !

    C'est pas très simple à comprend, surtout que je suis pas très bon pour les explication de ce genre

  13. #13
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    C'est un probleme d'encodage ton histoire. Regarde ce tableau :
    tu verras qu a l'unicode %E2 est associé l'UTF-8 c3, a2. Donc A toi def aire en sorte que tu decode ton url selon l'unicode et pas selon l'utf-8 .

    Tu trouveras des pistes ici je pense :http://msdn.microsoft.com/en-us/library/79cw2d9b.aspx

    bon decodage á toi

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Le problème étant que je ne décode pas moi même l'url, je ne vois pas comment faire...

    HttpContext.Current.Requtes.* ne me fournit que l'url décodé, du coup impossible de revenir sur l'encodage

    A moins que quelqu'un ait une idée?

  15. #15
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    même HttpContext.Current.Request.RawUrl ne correspond pas à la requete envoyée?

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Hélas, non l'url est déjà décodé... Et du coup j'ai déjà mon caractère inconnu

Discussions similaires

  1. Encodage & Décodage de fichier AMF avec java
    Par Kadran dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/03/2009, 12h24
  2. problème d'encodage décodage
    Par dj.motte dans le forum Général Python
    Réponses: 2
    Dernier message: 13/10/2008, 13h12
  3. [MySQL] Mauvais encodage MySQL
    Par blueice dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/08/2008, 12h39
  4. (java.net.) URLEncoder / URLDecoder
    Par Invité dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 22/02/2008, 12h19
  5. [MySQL] mauvais encodage, lorsque modifié dans la base
    Par __fabrice dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/02/2007, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo