Bonjour,

j'ai un petit soucis avec un formulaire de contact, en effet, lorsque je recois un mail des données que l'utilisateur a insérées dans le formulaire, les accents...ne sont pas prises en compte..je voulais savoir où il fallait régler l'unicode, dans la page du formulaire ce que je pense pas, ou bien de l'insérer dans un script php?

Merci pour vos éventuelles réponses.

Cordialement.
Bonjour,

Si tu veux travailler en UTF-8 par exemple, il faut:
- que la page de ton formulaire soit bien déclarée en UTF-8;
- que ton script qui récupère les données sache gérer un input en UTF-8 (de mémoire PHP travaille avec des données binaire pour le texte, donc pas besoin de décoder/encoder, mais attention aux nombreuses fonctions PHP de traitement des chaines de caractères qui par défaut attendent de l'ISO-8859-1);
- que la fonction ou la classe PHP qui génère ton email soit capable de gérer du texte en UTF-8 (à vérifier dans la documentation pour la fonction ou classe en question... si tu utilises la fonction mail() de PHP, je suis pas expert mais la documentation ne parle même pas de codage de caractères donc ça m'inspire moyennement confiance... personnellement j'irais chercher une classe PHP un peu évoluée).
bonjour à tous,
j'aimerais juste vous présenter deux fonctions php que j'utilise souvent pour éviter les désastres;
il s'agit de utf8_encode() et de utf8_decode(), je mexplique: lorsque la page est encodée en UTF-8 les données qui sont envoyées dans la base de donnée sont d'habitudes avec des ?$£§ ,
pour cela il faut decoder toutes les données en utf-8 juste avant de faire ta requête d'envoie
exemple
<?php
if(isset($_POST['text'])){

//après avoir fait tout le traitement nécéssaire on decode l'utf-8

$text = utf8_decode($_POST['text']);

//et on exécute une requête par exemple

mysql_query('INSERT INTO ma_table (article) VALUES ('.$text.')');


}
?>

autre précisions c'est que lorsqu'on travail en local il n'y a pas souvent baucoup d'érreur mes dès que le site est en ligne les érreur que notre serveur local avait toléré se présentent. s'il faut résumé tout ce que je viens de dire avec une ptite formule alors voilà :

---> (vérifié dans votre éditeur que la page est encodé en UTF-8 )

---> ( si oui vous devez mettre ceci dans le head <meta sharset="UTF-8">)

---> ( et faire un utf8_decode() juste avant d'envoyer les donnés dans la base)

---> ( ensuite assuré vous que les données seront récupéré en utf-8 sinon vous faite un utf8_encode() avant d'afficher un donnée qui vien de votre bdd) si vous avez autre souci à ce sujet faite moi signe.
cathalogue a écrit :
j'aimerais juste vous présenter deux fonctions php que j'utilise souvent pour éviter les désastres;
il s'agit de utf8_encode() et de utf8_decode()

Raaaah bordel c'est pas possible! Encore ces bêtises?
Mais lisez un peu la doc PHP pour comprendre ce que vous faites!

cathalogue a écrit :
lorsque la page est encodée en UTF-8 les données qui sont envoyées dans la base de donnée sont d'habitudes avec des ?$£§

Lorsque la page est déclarée en UTF-8, le navigateur va envoyer la saisie de l'utilisateur en UTF-8. (Si la page est déclarée en ISO-8859-1, il l'envoie en ISO-8859-1, et ainsi de suite.) Ton job à toi, c'est de configurer correctement ta base de données et tes scripts pour stocker ces données UTF-8 telles quelles, sans chercher à transcoder dans un codage de caractères différent (sinon tu perds tout l'intérêt d'Unicode, et ça sert donc à rien de bosser en UTF-8 à la base, soyons logiques). (Important: bien sûr on ne stocke pas les données en base telles quelles, il faut a minima faire quelques vérifications pour empêcher les injections SQL, sinon faille de sécurité béante...)

cathalogue a écrit :
pour cela il faut decoder toutes les données en utf-8 juste avant de faire ta requête d'envoie

Non, mille fois non.
Ce que fais ton code, c'est:
1. Recevoir des données a priori en UTF-8.
2. Les transcoder vers ISO-8859-1 grâce à utf8_decode().
3. Stocker les données ISO-8859-1 obtenues dans ta base de données.

Bottom line: ta base de données est en ISO-8859-1, pas en UTF-8, donc ton site ne retire strictement aucun avantage de l'utilisation d'UTF-8, vu que tu es limité au jeu de caractères ISO-8859-1 (quand tu utilises utf8_decode, les milliers de caractères existant en UTF-8 mais pas en ISO-8859-1 sont perdus, remplacés par des points d'interrogation -> donc tu pourris tes données, super).

cathalogue a écrit :
---> ( et faire un utf8_decode() juste avant d'envoyer les donnés dans la base)

NON.

cathalogue a écrit :
---> ( ensuite assuré vous que les données seront récupéré en utf-8 sinon vous faite un utf8_encode() avant d'afficher un donnée qui vien de votre bdd)

Non plus.
Pour rappel, utf8_encode transcode des données de ISO-8859-1 (et c'est effectivement ce type de données que tu as en base, vu les bêtises faites plus haut...) vers UTF-8.

LA BONNE SOLUTION c'est de bosser en UTF-8 d'un bout à l'autre, d'envoyer des données UTF-8 dans ta base de données, d'avoir une base en UTF-8 donc, et de récupérer ces données UTF-8 de la base quand tu veux en afficher sur ton site. Les fonctions utf8_decode et utf8_encode sont donc rigoureusement inutiles (elles n'ont d'intérêt que si tu travailles sciemment avec des données mixtes, par exemple si tu as plusieurs bases de données dont une en ISO-8859-1 qui est partagée avec une autre application et que tu ne peux donc pas convertir en UTF-8 une bonne fois pour toutes).

Bon, désolé de m'énerver ainsi mais lisez la doc avant de faire et conseiller des bêtises, quoi.
Modifié par fvsch (25 Aug 2012 - 12:59)