Les formulaires HTML: questions combinant jeu de caractères avec enctype dans Firefox
J'ai un site Web avec un message du conseil d'administration. Le conseil permet aux gens de poster des messages et des pièces jointes. J'ai eu un problème où mon site est en hiccuping chaque fois que quelqu'un écrit un post avec les caractères non Unicode. Dans un effort pour le résoudre, j'ai changé mon code HTML le code du formulaire de
enctype="multipart/form-data"
(je suis en acceptant les uploads de fichier) à:
enctype="multipart/form-data;charset=UTF-8"
Cela a résolu le caractère problème. Mais il s'est cassé le fichier de capacité de téléchargement de Firefox 2 à 3.5. Firefox accepte tout le texte que l'utilisateur soumet, mais pas le fichier de données. Il agit totalement comme il se doit, mais comme s'il n'y a pas de fichier soumis. Tout fonctionne bien dans Safari.
J'ai aussi essayé
enctype="multipart/form-data" accept-charset="UTF-8"
...mais qui n'avait aucun effet sur le caractère problème.
Toutes les idées des façons de contourner cela?
Vous devez vous connecter pour publier un commentaire.
charset
est pas le paramètre pour lemultipart/form-data
type de média. Il ne faut pas faire n'importe quoi.Selon
RFC2388
, le jeu de caractères des champs soumis devrait en fait être passé par le navigateur dans unContent-Type
en-tête de la forme de données de la sous-partie. En pratique, aucun navigateur n'cette.accept-charset
ne peut pas être utilisé parce qu'il est cassé dans IE: au lieu de choisir le jeu de caractères pour la présentation qu'il en fait spécifie un autre jeu de caractères à utiliser, sur un champ par champ, lorsque les caractères ne correspondent pas dans le primaire jeu de caractères (ce qui est le charset de la page en cours). Effectivement cela mangles vos chaînes que vous ne pouvez pas savoir quel jeu de caractères IE effectivement utilisé.Le seul moyen efficace pour rendre les navigateurs soumettre vos formulaires au format UTF-8 est de servir la page contenant le formulaire comme UTF-8, par la définition d'une
Content-Type: text/html;charset=utf-8
en-tête, y compris un<meta>
HTTP équivalent, ou les deux (peut-être une bonne idée si l'utilisateur enregistre la page de disque, de perdre les informations d'en-tête).Le problème n'est pas la forme de données, mais le champ nom de fichier qui ne fonctionne tout simplement pas si vous avez besoin d'
utf-8
et de fichiers de données, donc si vous avez besoin de traiter le nom du fichier sur le serveur, ce qui est fréquent, vous foiré.Si vous définissez
enctype="multipart/form-data;charset=UTF-8"
dans votre formulaire, Tomcat 6 convertit à: type de contenu:application/x-www-form-urlencoded
, qui est le problème.Il m'a pris les âges d'où ça vient, mais on dirait qu'il est cassé en général, et j'ai testé avec des requêtes HTTP à partir du navigateur web, et aussi .Net, avec le même effet.