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

Langage Delphi Discussion :

requete post avec parametre et caractere accentué


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Points : 42
    Points
    42
    Par défaut requete post avec parametre et caractere accentué
    Bonjour,

    Tout d'abort je tiens à signaler que j'ai été voir ce post :
    http://www.developpez.net/forums/d11...res-accentues/

    Mon problème est le même que cette personne a rencontré mais sa resolution ne me convient pas, à moins de me donner des détails sur le compo qu'il a utilisé^^.

    N'ayant pas voulu parasiter son post, je me suis permis de faire un nouveau post.

    Voici mon script php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    echo $_POST['filename'];
    ?>
    Voici ma fonction delphi :
    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
    18
    19
    20
    21
     
    var
      MultiPartFormDataStream  : TidMultiPartFormDataStream;
      s : string;
    begin
      MultiPartFormDataStream := TidMultiPartFormDataStream.create;
      MultiPartFormDataStream.AddFormField('method','post');
      MultiPartFormDataStream.AddFormField('filename',AnsiToUtf8('été'));
       MultiPartFormDataStream.Position := 0;
       s := executer_requete_post_v2('http://192.168.1.74/test.php',MultiPartFormDataStream);
       showmessage(s);
    end;
     
    function TForm1.executer_requete_post_v2(requete_: AnsiString;MultiPartFormDataStream : TidMultiPartFormDataStream) : string;
    begin
      result:='';
      try
      result := Utf8ToAnsi(IdHTTP1.Post(requete_, MultiPartFormDataStream));
      except
      end;
    end;
    Le résultat est "ete" et non "été", j'ai testé aussi en faisant la requête via httcli de F.Piette sans grande différence, je pense que ça vient de l'objet "idMultiPartFormDataStream" mais je ne trouve pas d'alternative.

    Comment faites vous pour ne pas avoir ce problème?

    Merci,

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    essaye ceci

    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
    18
    19
    20
    21
    var
      PostStream: TidMultiPartFormDataStream;
      ResponseStream: TIdStringStream;
    begin
      PostStream := TidMultiPartFormDataStream.create;
      try
        PostStream.AddFormField('method','post');
        PostStream.AddFormField('filename','été');
        ResponseStream := TIdStringStream.Create('');
        try
          IdHTTP1.Request.ContentType := PostStream.RequestContentType;
          IdHTTP1.Post('...', PostStream, ResponseStream);
     
          ShowMessage(ResponseStream.DataString);
        finally
          ResponseStream.Free;
        end;
      finally
        MultiPartFormDataStream.Free;
      end;  
    end;
    Normalement avec des caractères accentués, cela doit générer un Stream qui respecte RFC 2047 - MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text, la documentation de TIdMultiPartFormDataStream nous embrouille un peu, faut-il l'encoder soit même ou le gère-t-il ???
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Merci de ta réponse, mais avec l'exemple que tu fournis j'obtiens la même réponse a savoir "ete".

    Cependant il y a un truc étrange, je ne dispose pas de "TIdStringStream", pourtant je dispose d'Indy10.

    J'ai du le modifier comme suit :
    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
    18
    19
    20
    21
     
    PostStream: TidMultiPartFormDataStream;
      ResponseStream: TStringStream;
    begin
     
         PostStream := TidMultiPartFormDataStream.create;
      try
        PostStream.AddFormField('method','post');
        PostStream.AddFormField('filename','été');
        ResponseStream := TStringStream.Create('');
        try
          IdHTTP1.Request.ContentType := PostStream.RequestContentType;
          IdHTTP1.Post('http://192.168.1.74/test.php', PostStream, ResponseStream);
     
          ShowMessage(ResponseStream.DataString);
        finally
          ResponseStream.Free;
        end;
      finally
        MultiPartFormDataStream.Free;
      end;
    Merci,

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    tente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostStream.AddFormField('filename','=?ISO-8859-1?Q?=E9t=E9?=');
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    J'obtiens donc =?ISO-8859-1?Q?=E9t=E9?=
    Bon j 'ai résolu le problème en modifiant mon php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    echo urldecode($_POST['filename']);
    ?>
    et ma fonction delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    s :=HTTPEncode('été');
    MultiPartFormDataStream.AddFormField('filename',s);
    ...
    Et voilà, bon je contourne un peu le problème mais il faut que ca marche rapidement^^

    Merci du coup de main

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    HttpEncode ! évidemment !
    Effectivement 'été' ça donne '%E9t%E9' c'est plus simple comme encodage !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traiter une requête POST avec attachement
    Par queto_putito dans le forum Langage
    Réponses: 3
    Dernier message: 30/07/2007, 13h40
  2. Requete croisée avec parametre
    Par jacbint12 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 11/05/2007, 14h56
  3. [VBA]Requete SQL avec parametre numérique
    Par Pitou5464 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 06/09/2006, 10h33
  4. Requete Action avec parametre dans formulaire
    Par marie10 dans le forum IHM
    Réponses: 2
    Dernier message: 08/02/2006, 12h02
  5. Poster une requete POST avec fsockopen
    Par ePoX dans le forum Langage
    Réponses: 8
    Dernier message: 27/11/2005, 14h20

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