Texte brute dans formulaire PHP

[Résolu/Fermé]
Signaler
Messages postés
26
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
1 décembre 2010
-
Messages postés
26
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
1 décembre 2010
-
Bonjour,

Voilà j'ai utilisé un générateur pour mon formulaire de contact en php, il fonctionne à merveille si ce n'est que j'ai un problème : quand je reçois l'e-mail, les caractères accentués ne passent pas du tout.
Donc la question est la suivante (à savoir ce qu'il y a de plus simple) :
comment je peux soit tout changer pour que j'ai l'e-mail en texte brut, ou que dois-je modifier dans mon code pour que les caractères apparaissent correctement.
<?php

// On vérifie si la fonction ini_set() a été désactivée...
$desactive = ini_get('disable_functions');
if (preg_match("/ini_set/i", "$desactive") == 0) {
// Si elle n'est pas désactivée, on définit ini_set de manière à n'afficher que les erreurs...
ini_set("error_reporting" , "E_ALL & ~E_NOTICE");
}

// Vérifier que le formulaire a été envoyé...
if (isset($_POST['envoi'])) {


//On commence une session pour enregistrer les variables du formulaire...

session_start();

$_SESSION['champ1'] = $_POST['champ1'];
$_SESSION['champ2'] = $_POST['champ2'];
$_SESSION['champ3'] = $_POST['champ3'];
$_SESSION['zone_email1'] = $_POST['zone_email1'];
$_SESSION['liste1'] = $_POST['liste1'];
$_SESSION['liste2'] = $_POST['liste2'];

//Enregistrement des zones de texte...
$_SESSION['zone_texte1'] = $_POST['zone_texte1'];

// Définir l\'icone apparaissant en cas d\'erreur...


// Définir sur 0 pour afficher un petit x de couleur rouge.
// Définir sur 1 pour afficher l\'image d\'une croix rouge telle que celle utilisée dans l\'assistant
// Si vous utilisez l\'option 1, l\'image de la croix rouge \'icone.gif\' doit se trouver dans le répertoire \'images\',
// ce dernier devant se trouver au même niveau que votre formulaire...
$flag_icone = 0;

// On vérifie si $flag_icone est défini sur 0 ou 1...
if ($flag_icone == 0) {
$icone = "<b><font size=\"3\" face=\"Arial, Verdana, Helvetica, sans-serif\" color=\"#CC0000\">x</font></b>";
} else {
$icone = "<img src=\"images/icone.gif\"";
}

// Définir l'indicateur d'erreur sur zéro...
$flag_erreur = 0;
// N'envoyer le formulaire que s'il n'y a pas d'erreurs...
if ($flag_erreur == 0) {					

// Addresse de réception du formulaire
$email_dest = "infos@widelinkpc.be";
$sujet = "Renseignements - Sites";
$entetes ="MIME-Version: 1.0 \n";
	$entetes .="From: Wide Link PC<info@nomdedomaine.be>\n";
	$entetes .="Return-Path: Domaine<info@nomdedomaine.be>\n";
	$entetes .="Reply-To: Domaine<info@nomdedomaine.be>\n";
	$entetes .="Content-Type: text/html; charset=iso-8859-1 \n";
	$partie_entete = "<html>\n<head>\n<title>Formulaire</title>\n<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>\n</head>\n<body bgcolor=#FFFFFF>\n";


//Partie HTML de l'e-mail...
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Nom = " . $_SESSION['champ1'] . "</font><br>\n";
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Numéro de téléphone = " . $_SESSION['champ2'] . "</font><br>\n";
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Sujet de l\'email = " . $_SESSION['champ3'] . "</font><br>\n";
$partie_zone_email .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Email = " . $_SESSION['zone_email1'] . "</font><br>\n";
$partie_listes .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Civilité = " . $_SESSION['liste1'] . "</font><br>\n";
$partie_listes .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Statut = " . $_SESSION['liste2'] . "</font><br>\n";
$partie_zone_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Votre message = " . $_SESSION['zone_texte1'] . "</font><br>\n";
					

					// Fin du message HTML
					$fin = "</body></html>\n\n";
					
					$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_listes . $partie_boutons . $partie_cases . $partie_zone_texte . $fin;


					// Send the e-mail
					if (@!mail($email_dest,$sujet,$sortie,$entetes)) {
					echo("Envoi du formulaire impossible");
					exit();
					} else {

                    // Rediriger vers la page de remerciement
                    header("Location:http://www.nomdedomaine.be");
                    exit();
                  } // Fin else
			    } // Fin du if ($flag_erreur == 0) {
			} // Fin de if POST
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>">
  <div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong>Formulaire
    de contact</strong></font></div><br><table align="center" width="566" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td height="16"><div align="center">
  <font color="#CC0000" size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong><?php
if ($erreur_champ1) {
	  echo(stripslashes($erreur_champ1));
	  } else {
if ($erreur_champ2) {
	  echo(stripslashes($erreur_champ2));
	  } else {
if ($erreur_champ3) {
	  echo(stripslashes($erreur_champ3));
	  } else {
if ($erreur_email1) {
	  echo(stripslashes($erreur_email1));
	  } else {
if ($erreur_liste1) {
	  echo(stripslashes($erreur_liste1));
	  } else {
if ($erreur_liste2) {
	  echo(stripslashes($erreur_liste2));
	  } else {
if ($erreur_texte1) {
	  echo(stripslashes($erreur_texte1));
	  } else {
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
?>
    </strong></font>
    </div></td>
      </tr>
    </table>
<p align="center"></p><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Nom</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ1) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ1" type="text" value="<?=stripslashes($_SESSION['champ1']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Numéro de téléphone</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ2) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ2" type="text" value="<?=stripslashes($_SESSION['champ2']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Sujet de l'email</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ3) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ3" type="text" value="<?=stripslashes($_SESSION['champ3']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Email</font></div></td>
      <td width="30" align="center" valign="middle">
	  <?php
	  if ($erreur_email1) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><input name="zone_email1" type="text" value="<?=stripslashes($_SESSION['zone_email1']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Civilité</font></div></td>
      <td width="30" align="center" valign="middle">
	  <?php
	  if ($erreur_liste1) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><select name="liste1" style="width:146"><option value="">Sélectionner...</option>
<option value="Mademoiselle"<?php
if ($_SESSION['liste1'] == "Mademoiselle") {
echo(" selected");
}
?>>Mademoiselle</option>
<option value=" Madame"<?php
if ($_SESSION['liste1'] == " Madame") {
echo(" selected");
}
?>> Madame</option>
<option value=" Monsieur"<?php
if ($_SESSION['liste1'] == " Monsieur") {
echo(" selected");
}
?>> Monsieur</option>
</select></td></tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Statut</font></div></td>
      <td width="30" align="center" valign="middle">
	  <?php
	  if ($erreur_liste2) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><select name="liste2" style="width:146"><option value="">Sélectionner...</option>
<option value="Particulier"<?php
if ($_SESSION['liste2'] == "Particulier") {
echo(" selected");
}
?>>Particulier</option>
<option value=" Entreprise"<?php
if ($_SESSION['liste2'] == " Entreprise") {
echo(" selected");
}
?>> Entreprise</option>
</select></td></tr></table><table width="566" border="0" align="center"><tr>
      <td width="140" valign="top"><div align="right"><font face="Verdana" size="2">Votre message</font></div></td>
      <td width="30" align="center" valign="top">
	  <?php
	  if ($erreur_texte1) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><textarea name="zone_texte1" cols="45" rows="10"><?=stripslashes($_SESSION['zone_texte1']);?></textarea></td>
    </tr></table><table width="566" border="0" align="center"><tr>
<td valign="top"><div align="center"> 
          <input type="reset" name="Reset" value=" Effacer ">
            
          <input type="submit" name="envoi" value="Envoyer">
        </div></td></tr></table><div align="center"><input name="nbre_fichiers" type="hidden" id="nbre_fichiers" value=""></div></form>
</body>
</html>


D'avance merci pour votre aide.

4 réponses

Messages postés
764
Date d'inscription
mercredi 5 août 2009
Statut
Membre
Dernière intervention
7 août 2014
235
Salut,

header de ton mail "charset=iso-8859-1".
header de ta page contact "charset=utf-8".

Donc deux solutions :
1 - Soit tu mets les header de ton mail et de ta page au même charset utf-8 ou iso-8859-1.
2 - Soit tu utilises la fonction utf8_decode($champ) au moment ou tu inclus des données formulaire dans ton mail.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
18580
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 octobre 2021
4 326
Salut.

Ton fichier doit être encodé en UTF-8 car c'est cet encodage qui est précisé dans une meta.

Remplace également
$entetes .="Content-Type: text/html; charset=iso-8859-1 \n";
par
$entetes .="Content-Type: text/html; charset=utf-8 \n";
Messages postés
26
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
1 décembre 2010
5
Bonsoir,

J'ai effectivement mis utf-8 partout, mais je reçois toujours les caractères accentués non "décodés".

Pour la fonction utf8_decode($champ), pourrais-tu me dire exactement où l'inclure.

Merci d'avance.
Messages postés
764
Date d'inscription
mercredi 5 août 2009
Statut
Membre
Dernière intervention
7 août 2014
235
Utf8 implique quer ton webmail, ou logiciel mail utilise le codage utf8. Or par défauit c'est du iso.

Pour la fonction, si je reprends le mordeau de code suivant :
>Nom = " . $_SESSION['champ1'] . "

tu la mets ici :
>Nom = " . utf8_decode($_SESSION['champ1']) . "
Messages postés
26
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
1 décembre 2010
5
Bonsoir,

tout d'abord un grand merci pour la qualité et la rapidité des réponses.
Donc n"étant pas codeur j'ai un peu cherché des repaires dans le codes.

Pour les nuls comme moi voici donc où ça se passe avec le code ci-dessus :

//Partie HTML de l'e-mail...     
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Nom = " . $_SESSION['champ1'] . "</font><br>\n";     
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Numéro de téléphone = " . $_SESSION['champ2'] . "</font><br>\n";     
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Sujet de l'email = " . utf8_decode($_SESSION['champ3']) . "</font><br>\n";     
$partie_zone_email .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Email = " . $_SESSION['zone_email1'] . "</font><br>\n";     
$partie_listes .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Civilité = " . $_SESSION['liste1'] . "</font><br>\n";     
$partie_listes .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Statut = " . $_SESSION['liste2'] . "</font><br>\n";     
$partie_zone_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Votre message = " . $_SESSION['zone_texte1'] . "</font><br>\n"; ...


Bien entendu, il faut appliquer à tous les champs où il est susceptible d'avoir des caractères accentués.

Donc là encore j'ai cherché un peu plus loin que le bout de nez et j'ai changé d'adresse e-mail en redirigeant vers Gmail.
Et là tout est impeccable.

Deux solutions s'ouvrent à vous :

1) Appliquer les changements comme indiqué ci-dessus.

2) Si comme moi vous avez Thunderbird, faites comme ceci.
Outils -> Options -> Affichage ->Formatage ->Avancé - Encodage des caractères
Mettez UTF-8 aux 2

Edit : Je viens d'essayer dans Thunderbird et ça ne change rien.
Donc une seule méthode fonctionne.

Carton plein pour le_joker_fou.

Bravo et encore un tout tout grand merci pour l'aide.

Générateur de formulaire de contact PHP : http://www.comscripts.com/scripts/php.assistant-formulaire-php.1587.html