Je vais commencer par la correction du code (même si ce ne sera pas le final) :
foreach($_POST as $key => $value)
var_dump($key, $value);
Regarde le comportement de ce code. Et n'hésite pas à aller lire le manuel :
La boucle foreach.
L'encodage intervient à plusieurs endroits.
En tout premier lieu, comme tes pages sont toutes statiques (on va gagner vachement de temps), il faut que tes fichiers soient encodés en utf-8.
Ensuite, tu dois avoir un
charset (un
character set soit un ensemble de caractère) unicode, donc on prendra utf-8.
Enfin, comme certains navigateurs ont du mal de comprendre le
charset HTML, on va le donner en en-tête HTTP.
Accessoirement, on redéfinit aussi le
charset du mail pour certains outils de messagerie.
Ah oui, avant de continuer, laisse tomber le koi8-r. Le but d'unicode est d'
uniformiser les
codes justement. On ne va pas en gérer 50, ce serait une vraie galère.
Bien, c'est parti.
Tu travailles avec Dreamweaver … hmmm il faut que tu trouves l'encodage qu'il utilise dans les fichiers. Une fois que tu le connais, il faut modifier l'encodage de tous les fichiers. Pour ça :
Code : Tout sélectionner
iconv -f [encodage de départ] -t utf-8 [fichier(s)] > test.html Si tu n'es pas sûr que iconv comprenne ton encodage de départ, regarde s'il existe dans la liste :
Et enfin, [fichier(s)] sera remplacé par un seul fichier histoire de tester si ça marche, et le résultat sera enregistré dans test.html. On verra pour le faire sur tous les fichiers plus tard.
Ça, ça fonctionne sous Unix (Linux, BSD, Mac), mais je doute que la commande existe sur Windows …
Je suis allé sur iconv.org car il met en place une interface graphique Web pour faire ça au lieu de le faire en ligne de commande, et je suis tombé sur
Charco. Je ne l'ai pas testé mais c'est un programme qui fait la même chose que ma ligne de commande sauf que c'est un programme avec une interface graphique et il existe sous Win, Mac et Linux. Je viens de le tester en fait, ça marche bien et c'est très simple à utiliser. Tu devrais t'y retrouver.
Ah oui, une fois que c'est fait, modifie l'encodage de Dreamweaver pour qu'il lise et écrive les fichiers en utf-8, ce sera mieux …
Maintenant que tes fichiers ont le bon encodage, tu peux écouter
Doxology (al Dios De Bondad) sur le
live in Switzerland de Abe Laboriel & Friends, et danser un peu. Prend un thé (ou un café pour les autres là) et on y retourne.
Il faut préciser sur chaque page que le contenu HTML est codé en utf-8. Pour ça :
Code : Tout sélectionner
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript; charset=utf-8" />
<meta http-equiv="content-style-type" content="text/css; charset=utf-8" /> devrait suffir (tu utilises XHTML 1.0, j'ai donc mis un contenu
application/xhtml+xml, ce n'est pas obligatoire, mais … bref … bon, ce n'est pas ton problème actuellement).
Histoire d'être vraiment sûr que le fichier soit envoyé en utf-8, on peut envoyer une en-tête HTTP. Normalement, comme le fichier est enregistré en utf-8, et que le code HTML spécifie bien (confirme) que c'est de l'utf-8, on ne devrait pas avoir de soucis, mais bon … mieux vaut prévoir que guérir hein. … … Je réfléchissais et je me disais qu'on n'allait pas faire ça tout de suite. Si et seulement si on n'aura encore des problèmes. Car sur mon site, je n'envoie pas l'en-tête et tout passe très bien. On verra. Ça t'évite du travail pour l'instant et ce n'est
a priori pas obligatoire. On zap ça pour l'instant.
À ce stade, il faut vérifier que tes pages s'affichent bien. Si c'est le cas, on continue, sinon, bah revient sur le forum, dis nous exactement ce que tu as fait etc.
Donc, si on continue, on va s'attaquer au formulaire.
Voici le code à utiliser :
$to = '[email protected]';
$subject = 'Sujet du mail';
$message = 'Notre message';
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'Content-Type: text/plain; charset=utf-8' . "\r\n";
mail(…);
Si $message est constitué des valeurs du formulaire, on aurait :
$message = null;
foreach($_POST as $key => $value)
$message .= $key . ' : ' . $value . "\n";
Attention, on devrait utilisé base64 ou
quoted-printable pour passer de l'unicode mais je ne suis plus sûr du cas d'utilisation. J'aimerais qu'on me confirme ça

. J'avais en mémoire que ça ne concernait que les en-têtes MIME …
On va faire sans pour l'instant et observer.
Il te faut PHP 4.0.6 au minimum, donc vérifie ta version de PHP :
var_dump(phpversion());
ou
phpinfo();
Tu as 3 étapes, commence par la première bien évidemment et n'hésite pas à revenir poser des questions.
Une fois que tout ça sera fait, il faudra toujours travailler avec utf-8, c'est à dire que tous tes éditeurs de page HTML, de texte, de n'importe-quoi-qui-te-sert-à-programmer devra utiliser utf-8. De cette façon, plus aucun problème d'encodage

.
J'aimerais aussi que tu conserves toujours à l'esprit que ce genre de problème n'a pas une seule façon de se résoudre. Beaucoup d'événements et d'éléments interviennent. L'environnement de développement y joue un rôle important et comme je ne le connais pas, c'est pas simple. Je t'ai donné ici un mode d'emploi générique et j'espère qu'il fonctionnera …