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

HTML Discussion :

Charset des formulaires multipart/form-data


Sujet :

HTML

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Charset des formulaires multipart/form-data
    Bonjour,

    je vais essayer d'être clair mais c'est pas gagné.

    J'ai un formulaire à partir duquel on peut poster des fichiers + du texte.

    Le texte envoyé est en UTF-8.

    Or mon serveur applicatif (TOMCAT, JAVA/JSP) essaye de lire les données du formulaire en ISO-8859. Enfin je pense! toujours est il que si je ne touche à rien, je me retrouve avec des caractère corrompus.

    Alors que si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monString = new String(monString(getBytes),"UTF-8");
    Là les caractères sont ok! Donc c'est bien de l'UTF-8.

    Mais j'ai pas envie de faire comme ça!!!

    Donc j'ai mis en place un filtre qui fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req.setCharacterEncoding("UTF-8");
    qui fonctionne très bien pour les formulaires type "application/x-www-form-urlencoded".

    Mais avec des fichiers, je suis obligé d'avoir un formulaire de type : "multipart/form-data" et là le filtre n'a pas d'effet.

    J'ai donc lu la RFC 2388

    4.5 Charset of text in form data

    Each part of a multipart/form-data is supposed to have a content-
    type. In the case where a field element is text, the charset
    parameter for the text indicates the character encoding used.

    For example, a form with a text field in which a user typed 'Joe owes
    <eu>100' where <eu> is the Euro symbol might have form data returned
    as:

    --AaB03x
    content-disposition: form-data; name="field1"
    content-type: text/plain;charset=windows-1250
    content-transfer-encoding: quoted-printable
    Donc, il faudrait spécifier pour chaque champ, le content-type et le charset!

    OUI MAIS COMMENT???

    Moi quand je regarde ce que j'envoie j'ai ça :

    -----------------------------11080729823391
    Content-Disposition: form-data; name="lblDossier"

    ééééééééé
    -----------------------------11080729823391
    Content-Disposition: form-data; name="fichier_1"; filename="align_milieu.JPG"
    Content-Type: image/jpeg
    Donc il manque le content-type et le charset pour mon champ "lblDossier"! Ils ne sont pas obligatoires et quand ils sont non présents, le serveur choisit. Et j'imagine qu'en l'occurence, TOMCAT choisit "ISO 8859"...

    Bref je voudrais savoir comment forcer ces valeurs!

    Merci à vous :-)

    PS : voici mon code de la "vue" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" action="..." name="..." enctype="multipart/form-data" accept-charset="utf-8" >
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="lblDossier" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="file" name="fichier_1" />

  2. #2
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Probleme d'encodage avec enctype="multipart/form-data"
    Je pense q'il faut essayer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <h:form prependId="false" id="formGlobal" acceptcharset="ISO-8859-1" enctype="multipart/form-data">
       ... Le contenu de ton formulaire est ici (Texte+fichier a uploader)
    </h:form>

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 561
    Points : 21 624
    Points
    21 624
    Par défaut
    Citation Envoyé par Grincheux41 Voir le message
    Bref je voudrais savoir comment forcer ces valeurs!
    Selon la RFC ces valeurs n'ont pas à être forcées, puisqu'elles sont censées être obligatoires -_-°.

    Mais les navigateurs ne peuvent pas indiquer le charset comme le demande la RFC.
    En effet, au début les navigateurs s'en foutaient complètement des charsets et de la RFC, et donc ne pensaient pas qu'il y avait quelque chose à mettre. Des sites webs sont apparus, des petits, des gros, et eux-même n'en avaient rien à foutre de la RFC, ils ne s'occupaient que de ce qu'envoyaient les navigateurs.
    Certains de ces sites ne pensaient pas qu'il pourrait y avoir un charset indiqué, et s'il y en a un, ils ne savent pas lire la requête, ils font une erreur et le visiteur ne peut rien y faire.
    Autrement dit, respecter la RFC casse ces sites. CQFD.
    Les navigateurs ne le feront pas. Firefox a essayé et a dû admettre que ce n'était pas possible.

    Le WHAT-WG, se basant sur les Web Forms, a proposé une autre solution dans HTML5 pour indiquer le charset. Une autre solution que ce que demande la RFC.
    C'est d'ajouter un champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="_charset_" type="hidden" value="utf-8" />
    Les navigateurs compatibles sont censés ignorer le "value" et mettre à la place le charset qu'ils utilisent. Mais on peut le mettre pour les navigateurs non compatibles.

    En théorie, un serveur web peut donc choisir de se baser sur ce champ _charset_ et en déduire le charset. Mais ce serveur web doit connaître cette convention et l'implémenter, ce n'est pas la RFC.
    J'ignore si Tomcat gère ça.

    Dans les faits, tout le monde a adopté d'autres solutions:

    Solution #1 : Je n'envoie pas de texte avec mes fichiers, alors la question ne se pose pas.

    Solution #2 : C'est mon serveur web qui a envoyé cette page et c'est cette page qui décide en quel encodage sont envoyées les données, donc je sais très bien quel est l'encodage, j'ai pas besoin qu'on me le dise !
    J'ignore comment gérer cela avec Tomcat, j'ai toujours été adepte de la solution #1.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/10/2011, 19h19
  2. formulaire multipart/form-data envoie de fichier xml
    Par viscere dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/09/2010, 17h04
  3. traitement d'un formulaire multipart/form-data
    Par riadhhwajdii dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 24/12/2009, 11h45
  4. Réponses: 2
    Dernier message: 08/05/2009, 18h00
  5. Réponses: 1
    Dernier message: 25/06/2007, 21h10

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