Texte brute dans formulaire PHP

Résolu/Fermé
Hanz0 Messages postés 26 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 1 décembre 2010 - 19 juil. 2010 à 17:44
Hanz0 Messages postés 26 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 1 décembre 2010 - 19 juil. 2010 à 19:54
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.
A voir également:

4 réponses

le_joker_fou Messages postés 764 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 7 août 2014 239
19 juil. 2010 à 18:40
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
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 499
19 juil. 2010 à 18:38
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";
0
Hanz0 Messages postés 26 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 1 décembre 2010 5
Modifié par Hanz0 le 19/07/2010 à 18:52
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.
0
le_joker_fou Messages postés 764 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 7 août 2014 239
19 juil. 2010 à 19:07
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']) . "
0
Hanz0 Messages postés 26 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 1 décembre 2010 5
Modifié par Hanz0 le 19/07/2010 à 20:54
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
0