8797 sujets

Développement web côté serveur, CMS

Bonjour,
Lors de la réception des réponses du formulaire, les caractères spéciaux ne s'affichent pas correctement. Comment faire?
Dans le fichier html :
<FORM method=POST action=contact.php target="_self"><table width="100%" border="0" align="center" cellpadding="1" cellspacing="1">
<tr>
<td > <input type=hidden name=subject value=contact>
Nom et prénom <br />
<INPUT NAME="Nom" TYPE="text" SIZE="30"><br />
Entreprise <br />
<INPUT NAME="Societe" TYPE="text" SIZE="30"><br />
E-mail <br />
<INPUT NAME="<Email" TYPE="text" SIZE="30"><br />
Objet <br />
<INPUT NAME="Objet" TYPE="text" SIZE="30"><br />

Message<br />

<TEXTAREA NAME="Comments" COLS="50" ROWS="9">
</TEXTAREA><br /><br />

<INPUT TYPE="SUBMIT" VALUE="Envoyer"> </td>
</tr>
</table>
</FORM>

dans le fichier php :
<?php
$TO = "mail@orange.fr";
$subject = "Prise de contact du site";
$h = "From: " . $TO;
$message = "Du site internet :";
while (list($key, $val) = each($HTTP_POST_VARS)) {
$message .= "$key : $val\n";
}
mail
($TO,
$subject,
$message,
$h);
header("Location:accuse.html");
?>

Merci d'avance !
Bonjour,
je rencontre le même problème ,pas facile de trouver une réponse claire sur le net. Pour l'origine c'est tout ce que j'ai trouvé pour l'instant :
je ne sais pas si par extension cela peut s'appliquer aux messages:

a écrit :
Reconnaissance rapide des problèmes d'affichage UTF-8 ISO

Si la page affiche des caractères de ce type : "é", "î", "Ã", ...
=> Les données ont été enregistrées au format UTF-8, et le navigateur les affiche en pensant avoir affaire à de l'ISO.

Si la page affiche des caractères de ce type : "&#65533;"
=> Les données ont été enregistrées au format ISO, et le navigateur les affiche en pensant avoir affaire à de l'UTF-8.

Si les données sont codées en dur dans la page, voir l'encodage de l'éditeur de texte, l'header apache et la balise meta "charset".
Si les données proviennent de la base, vérifier le format de stockage et les méthodes de lecture et d'insertion (SET NAMES et charset).
Si les données proviennent de l'extérieur (web services, rss, ...), penser à convertir les chaînes de caractère (utf8_encode-decode et fonctions du module iconv).

PHP travail nativement en ISO, ce n'est qu'à partir de la v6 qu'il basculera entièrement en UTF-8.
Deux modules permettent de gérer différents types d'encodages, mbstring et iconv.

mbstring s'occupe de la manipulation de chaînes tandis qu'iconv permet de convertir différents types d'encodages. Les conversions entre ISO et UTF-8 peuvent se réaliser à l'aide des fonctions utf8_encode() et utf8_decode(). Une conversion à partir ou à destinations d'une autre norme nécessitera les fonctions du module iconv.

D'autres fonctions supportent différents charsets sous réserve de l'indiquer, tel que html_entities() (dont on pourra se passer au profit de htmlspecialschar() une fois les problématiques d'encodage apréhendées...html_entities ne s'occupe que de des caractères latins).




En espérant que ça te serviras. Si tu trouves une solution, je suis preneur.
Modifié par truitas (06 Jan 2012 - 15:35)
Afin de ne pas avoir de problème d'encodage et j'entends par là JAMAIS 3 règles simples :

-1.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-2. Encodage de toutes les données de la base MySQL ou autre en utf8.
-3. Encodage de tous les fichiers en UTF8-sansbom (c'est écrit en bas à droite dans notepad ++ si c'est "ANSI" c'est pas bon).

Et c'est TOUT, si tu as un problème d'encodage c'est simplement parce que tu as une incohérence à l'un de ces niveaux.

L'exemple est pour l'utf-8 mais est aussi valable pour le iso (remplacer utf8 par iso, hein ^^).
@Su4p merci,
le problème apparait dans le contenu du message reçu après l'envoi d'un formulaire.
J'utilise dreamweaver et j'avais vérifié les points que tu cites. Du coup je tourne en rond...