Bonjour,

Je viens de lire avec attention les messages et les astuces comme "comment bien déclarer l'encodage des caractères d'une page ?" mais j'ai toujours des problèmes d'encodages. Je me dirige vers vous, peut-être vous verrez mieux où se situe mon problème.
J'ai un formulaire avec un fichier php. A la réception du test sur ma messagerie (mail, mac) je n'ai aucun problème d'affichage des accents. Par contre, j'ai fais plusieurs tests Smiley sweatdrop , et sur internet dans gmail, ça passe très bien, mais sur free et hotmail pas du tout. Il y a des losanges noir qui apparaissent à la place des accents. ?? et j'ai lu dans le forum que hotmail géré le UFT-8
Sur hotmail, il y a un onglet "format de l'encodage" et par défaut il est sur Automatique, quand je passe sur Alphabet Occidental, là j'ai les accents. Mais bon, se serait mieux si ils apparaissent directement.
Sur ma page html la balise meta est
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


et mon fichier php qui est enregistrer en UTF-8:
<?php
# Pour envoyer un mail HTML
     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
#
# fonction permettant l'encodage des caractéres accentuées
function getFormatedText($texte){ 
$texte =utf8_decode($texte); 
$texte =eregi_replace( "\r", "\n", $texte); 
$texte =stripcslashes($texte); 
return $texte; 
} 
# fin de la fonction

# application de la function aux variables concernées
$prenom=getFormatedText($prenom);
$nom=getFormatedText($nom);
$phone=getFormatedText($phone);
$objet=getFormatedText($objet);
$mess=getFormatedText($mess);

# Formatage du corps du message ###############################################
#
$FormContent="
Prénom: $prenom
Nom: $nom
E-mail: $email
Tél.: $phone
Objet: $objet
Message: $mess
".urlencode(utf8_encode($FormContent));
#
#
mail($MailTo, "Message (de $prenom $nom)", $FormContent, "From: $email");
#
#
?>


Si quelqu'un a une petite idée ??
merci beaucoup Smiley cligne
Bonjour,

Il y a trois questions à se poser pour bien gérer le codage des caractères d'un document dans les applications informatiques:

1. Quel est le jeu de caractères et le codage de mon document. (À noter que pour ISO-8859-1 et beaucoup d'autres, le jeu de caractères et le codage des caractères sont confondus. Par contre, pour UTF-8 on peut distinguer le jeu de caractères, à savoir Unicode, et le codage des caractères, à savoir UTF-8 lui-même.)
2. Comment est-ce que je déclare le codage des caractères?
3. Le logiciel qui lit le document est-il capable d'interpréter ce codage?

La dernière question ne se pose pas pour les navigateurs web (sauf rares exceptions je suppose, avec des codages très rares). Pour les clients mail, je ne sais pas exactement, mais je suppose qu'ils commencent à bien gérer ça.

Par contre pour éviter les problèmes il faut être sûr du codage du document (première question), et s'assurer qu'on le déclare correctement (deuxième question).

Vu ton code PHP, je dirais que tu envoies des données mixtes:
- Le mot "Prénom" dans ton gabarit contient un caractère non-ASCII en UTF-8 (vu que ton fichier est enregistré en UTF-8).
- Par contre dans le même gabarit tu insères des chaines de caractères qui seront en ISO-8859-1 (vu que tu utilises la fonction utf8_decode pour les produire).
Donc déjà c'est le bazar.
Ensuite tu as l'air de faire un utf8_encode, ce qui m'échappe un peu. Tu convertis en ISO-8859-1 pour repasser ensuite en UTF-8? Smiley ohwell

Niveau déclaration, pour un mail au format text/plain il te faudrait un en-tête comme suit:
Content-Type: text/plain; charset=UTF-8

Tu peux faire ça avec la fonction mail de PHP. Voir la doc:
http://php.net/manual/en/function.mail.php
Salut Florent,

merci d'avoir pris de ton temps pour me répondre.
Je t'avoue que je suis perdu dans entre utf-8 et ISO-8859-1 ??
Si j'ai bien compris, il faut que dans l'en-tête de la page html, le charset=UTF-8 ? et dans le php aussi ?
Tu parles du niveau de déclaration qui devrait être utf-8 mais il y est déjà ??
mais le problème aussi c'est que en passant par gmail, les caractères s'affichent bien mais sur hotmail ou free, pas du tout.
Alors je sais plus quoi mettre ??
Quand penses-tu ?
merci beaucoup pour ton aide
goth3 a écrit :
Tu parles du niveau de déclaration qui devrait être utf-8 mais il y est déjà ??

Tu as le code source des emails envoyés? Tu peux le consulter et voir si le codage des caractères est bien déclaré?

Pour info, Gmail permet de consulter la source (code) d'un e-mail, en utilisant l'option «Afficher l'original» dans le menu déroulant en haut à droite du message (accessible depuis le bouton avec une flèche vers le bas).

goth3 a écrit :
Quand penses-tu ?

Qu'il te faut répondre aux questions 1 et 2 pour chaque élément du problème: la page de formulaire de contact d'une part (à priori enregistrée et déclarée en UTF-8), et les e-mails envoyés (à priori enregistrés avec des données mixtes, et déclarés en... aucune idée).
Salut Florent,

J'ai regardé sur gmail, le code source du mail. Sur cette pages les caractères n'étaient pas accentués... Smiley confus mais remplacer par des losanges noires avec un ? dedans.
vraiment, je n'y comprends rien.
Voici mes réponses aux questions :

1. Quel est le jeu de caractères et le codage de mon document :
Le fichier html est en utf-8
le ficher php est enregistrer en utf-8

2. Comment est-ce que je déclare le codage des caractères?
# Pour envoyer un mail HTML, 
     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

non ? ... c'est pas ça ...

j'ai fais 10000 test mais rien n'y fait Smiley bawling
merci pour ton temps et ton aide
@+
goth3 a écrit :
1. Quel est le jeu de caractères et le codage de mon document :
Le fichier html est en utf-8
le ficher php est enregistrer en utf-8

Ce qui ne garantit rien sur le codage des caractères de l'e-mail que tu envoies (qui est un document différent de ta page HTML, hein). Surtout que tu utilises des fonctions PHP pour transformer de l'UTF-8 en ISO-8859-1 et que tu as pas l'air de savoir pourquoi (copier-coller de code?).

goth3 a écrit :
2. Comment est-ce que je déclare le codage des caractères?

Heu... RTFM?
À priori tu envoies ton mail au format text/plain, pas en multipart.
Donc il te faut un en-tête du type Content-Type: text/plain; charset=UTF-8.
Pour savoir comment le déclarer avec la fonction mail() de PHP, lire la documentation et les exemples ici:
http://php.net/manual/en/function.mail.php

goth3 a écrit :
j'ai fais 10000 test mais rien n'y fait Smiley bawling

Mieux vaut lire la doc avant de faire des tests, ça marche souvent mieux. Smiley cligne
Salut Florent,

j'ai mis un peu de temps à répondre ...
Pour info, j'ai beau lire la doc ou faire des recherches, rien y fait Smiley decu
le code php, c'est un ami qui me l'avait fait car je ne connais pas le php. Je m'en sert depuis longtemps, comme je regarde mes mails avec un logiciel type thunderbird ou mail, et que les caractères accentués s'affichent très bien et je ne m'etais pas penché sur la gestion des caractères via hotmail. Smiley sweatdrop
j'ai rajouté un en-tête Content mais ça fonctionne pas ...
Peux-tu m'aider, s'il te plais ?
merci beaucoup
++
Modifié par goth3 (15 Apr 2010 - 13:43)