Bonjour à tous,
Je me suis pas mal excité sur un problème avec un formulaire depuis quelques jours et j'ai réussi à reproduire et à cerner le souci.
j'aimerai savoir si vous l'avez déjà rencontré (sinon, c'est peu être un nouveau bug, qui sait) et surtout si vous arrivez à le reproduire.
Voici les instructions :
Le bug se produit avec Internet Explorer (j'ai une v6), et se situe au moment de l'envoi des infos d'un formulaire avec les caractèristiques suivantes :
method : post
enctype : multipart/form-data
Code :
- exemple :
- <form name="monForm" method="post" action="test.asp" enctype="multipart/form-data">
|
Il faut ensuite que le document HTML contenant ce formulaire soir en charset iso-8859-1 :
Code :
- exemple de tag meta :
- <META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
|
Il faut aussi que le dernier champ du formulaire soit un input de type "checkbox" ou "radio".
Enfin, il faut que l'un des champs du formulaire (un input type=text par exemple ou un textarea) contienne au moins un caractère du charset windows-1252 (par exemple issu d'un copier/collé de MS Word ->
, voir par exemple http://psacake.com/web/0302-b.asp )
ET que le dernier champ du formulaire de type "checkbox" ou "radio" ne soit pas coché.
Et là c'est le drame.
IE envoie les infos du formulaire, mais elles sont mal formées et le début est tronqué, résultat les logiciels ne peuvent pas traiter les valeurs. ASP par exemple n'arrive donc pas à répartir les valeurs dans la collection request.form.
Comment donc voir qu'il y a une erreur ?
Il suffit pour cela d'afficher les données "brutes" d'envoi (request.binaryread) en définissant l'action du formulaire comme pointant vers un fichier de ce type (là j'ai qu'un exemple en ASP, mais on devrait avoir le même résultat en PHP normalement, selon ma théorie)
exemple de fichier test.asp :
Code :
- <%
- Response.ContentType = "text/plain"
- response.binarywrite(request.binaryread(Request.TotalBytes))
- %>
|
on constate donc que la première ligne est tronquée et qu'il manque
Code :
- -----------------------------7d46b38300302
- Content-Disposition: form-data; name="
|
au début des données.
Note : 7d46b38300302 varie à chaque envoi du formulaire, là j'ai juste copié un cas particulier.
Donc forcement ça marche moins bien.
Par contre si on coche la checkbox" ou "radio" ou qu'on a pas enctype="multipart/form-data" ou encore que le charset de la page est windows-1252 ou qu'il n'y a pas de caractère windows-1252 dans aucun champs, ça marche.
C'est sur que c'est pas un cas qu'on rencontre souvent, mais quand même...
Donc si vous aussi vous constatez ce bug en suivant mes instructions, ben c'est que c'est pas ma faute et je vous en remercie
Message édité par nima le 13-10-2004 à 15:23:18