OVH Cloud OVH Cloud

charset d'un formulaire

3 réponses
Avatar
Etienne SOBOLE
salut.

pour faire simple j'ai un script php qui recoit des formulaire tanto en
utf-8 et tanto en iso-8859-1.
ca que je souhaite c'est tr'aiter tout les formulaire en utf-8...

comment est ce que je peux savoir quand est-ce qu'il faut faire la
conversion?
Merci
Etienne

3 réponses

Avatar
ftc
salut.

pour faire simple j'ai un script php qui recoit des formulaire tanto en
utf-8 et tanto en iso-8859-1.
ca que je souhaite c'est tr'aiter tout les formulaire en utf-8...

comment est ce que je peux savoir quand est-ce qu'il faut faire la
conversion?


Tu peux tester si les donnée envoyées sont en utf-8:
function seems_utf8($Str) {
for ($i=0; $i<strlen($Str); $i++) {
if (ord($Str[$i]) < 0x80) $n=0; # 0bbbbbbb
elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
elseif ((ord($Str[$i]) & 0xF0) == 0xF0) $n=3; # 1111bbbb
else return false; # Does not match any model
for ($j=0; $j<$n; $j++) { # n octets that match 10bbbbbb follow ?
if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
return false;
}
}
return true;
}

// Directement pris sur la doc php.

Ensuite, si c'est de l'iso-8859-1, il suffit de l'encoder en utf-8 avec
utf8_encode ou une autre fonction du genre disponible dans PHP.

Avatar
Patrick Mevzek
pour faire simple j'ai un script php qui recoit des formulaire tanto en
utf-8 et tanto en iso-8859-1.
ca que je souhaite c'est tr'aiter tout les formulaire en utf-8...


*Normalement* le formulaire est renvoyé avec le même charset que celui de
la page où il était. Il suffit donc d'envoyer toutes les pages en utf-8
(et si vous avez des pages actuellement en isolatin1, il n'est pas
difficile de les convertir en utf-8)

Mais cela fait partie des zones d'ombre.

comment est ce que je peux savoir quand est-ce qu'il faut faire la
conversion?


Il y a des routines qui essayent de récupérer le charset à partir du
contenu, mais ce ne sont que des heuristiques.
Une autre idée:
mettre un contenu spécifique dans votre formulaire, qui ne sert à rien,
mais qui permettra, en voyant ce que vous avez récupéré, de savoir quel
est le charset.


Cf http://ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html
qui est une très bonne ressource sur la question.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>

Avatar
Etienne SOBOLE
*Normalement* le formulaire est renvoyé avec le même charset que celui de
la page où il était. Il suffit donc d'envoyer toutes les pages en utf-8
(et si vous avez des pages actuellement en isolatin1, il n'est pas
difficile de les convertir en utf-8)


Oui. ca se serait super, mais mon probleme vient d'un bug de firefox.
En fait (bon la je sors un peu du PHP)
je créer une iframe dans laquelle je crée un formulaire que je poste.
De la sorte, j'arrive à faire un echange avec le serveur sans rafraichir la
page.

mais l'iframe créée sous IE est bien en UTF-8 (la page originale etant elle
en UTF-8)
par contre sous Firefox, elle ne l'est pas.

Il y a des routines qui essayent de récupérer le charset à partir du
contenu, mais ce ne sont que des heuristiques.


oui j'ai testé ca, et ca me parait un poil bidouille...

Une autre idée:
mettre un contenu spécifique dans votre formulaire, qui ne sert à rien,
mais qui permettra, en voyant ce que vous avez récupéré, de savoir quel
est le charset.


Ca aussi ca me semblait bidouille, vu que mon problème repose sur un bug de
firefox qui n'existera peut etre plus demain.

Pour finir j'ai decouvert l'attribut access-charset de la balise form qui
semble corriger mon probleme.
c'est donc une solution HTML que j'ai utilisée plutot qu'une solution PHP !

désolé du dérangement,
et merci de vos contributions.
Etienne