Je sais que le problème a été soulevé des milliers de fois.. mais je bloque. J'ai testé un script php. Il est encodé en utf-8. C'est pour envoyer un mail avec un captcha. Je ne l'ai pas inventé, je ne suis pas super bon en php encore.. la preuve, j'y arrive pas.

Voici le code :


<?php 

session_start();
$errors = '';
$name = '';
$visitor_email = '';
$user_message = '';

if(isset($_POST['submit']))
{
	
	$name = $_POST['name'];
	$visitor_email = $_POST['email'];
	$user_message = $_POST['message'];
	///------------Do Validations-------------
	if(empty($name)||empty($visitor_email))
	{
		$errors .= "\n Name and Email are required fields. ";	
	}
	if(IsInjected($visitor_email))
	{
		$errors .= "\n Bad email value!";
	}
	if(empty($_SESSION['6_letters_code'] ) ||
	  strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)
	{
	//Note: the captcha code is compared case insensitively.
	//if you want case sensitive match, update the check above to
	// strcmp()
		$errors .= "\n Oups!  Mauvais code ... Veuillez inscrire les chiffres et les lettre dans le même ordre svp!";
	}
	
	if(empty($errors))
	{
		//send the email
		$to = "monmail@monserveur";
		$subject="AIDE ET SUPPORT / ";
		$from = "de@moi.com";
		$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
		
		$body = 
		"Bonjour $name, voici les informations transmises\n\n". 
		"Nom: $name\n".
		"Email: $visitor_email \n".
		"Message: \n ".
		"$user_message\n".
		"IP: $ip\n";	
		
		$headers = "From: demoi@demoi.com \r\n";
		$headers .= "Cc: $visitor_email \r\n";
		$headers .= "Reply-To: $visitor_email \r\n";
		$headers .='Content-Type: text/html; charset="utf-8"'."\n";
                $headers .='Content-Transfer-Encoding: 8bit';  
		
		mail($to, $subject, $body,$headers);
		
		header('Location: thank-you.html');
	}
}

// Function to validate against any email injection attempts
function IsInjected($str)
{
  $injections = array('(\n+)',
              '(\r+)',
              '(\t+)',
              '(%0A+)',
              '(%0D+)',
              '(%08+)',
              '(%09+)'
              );
  $inject = join('|', $injections);
  $inject = "/$inject/i";
  if(preg_match($inject,$str))
    {
    return true;
  }
  else
    {
    return false;
  }
}
?>
<!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>


<!-- define some style elements-->
<style>
label,a, body 
{
	font-family : Arial, Helvetica, sans-serif;
	font-size : 12px; 
}
.err
{
	font-family : Verdana, Helvetica, sans-serif;
	font-size : 12px;
	color: red;
}
</style>	
<!-- a helper script for vaidating the form-->
<script language="JavaScript" src="scripts/gen_validatorv31.js" type="text/javascript"></script>	
</head>

<body>
<p>
  <img src="../../images/formulaire.gif" width="300" height="50"></p>
<p>
  <?php
if(!empty($errors)){
echo "<p class='err'>".nl2br($errors)."</p>";
}
?>
</p>
<div id='contact_form_errorloc' class='err'></div>
<form method="POST" name="contact_form" 
action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>"> 
<p>
<label for='name'>Nom: </label><br>
<input type="text" name="name" value='<?php echo htmlentities($name) ?>'>
</p>
<p>
<label for='email'>Courriel: </label><br>
<input type="text" name="email" value='<?php echo htmlentities($visitor_email) ?>'>
</p>
<p>
<label for='message'>Message:</label> <br>
<textarea name="message" rows=8 cols=30><?php echo htmlentities($user_message) ?></textarea>
</p>
<p>
<img src="captcha_code_file.php?rand=<?php echo rand(); ?>" id='captchaimg' ><br>
<label for='message'>Entrez le code ci-haut :</label><br>
<input id="6_letters_code" name="6_letters_code" type="text"><br>
<small>Code illisible? Cliquez <a href='javascript: refreshCaptcha();'>ici</a> pour en obtenir un nouveau.</small></p>
<input type="submit" value="OK" name='submit'>
</form>
<script language="JavaScript">
// Code for validating the form
// Visit  http://www.javascript-coder.com/html-form/javascript-form-validation.phtml
 
// for details
var frmvalidator  = new Validator("contact_form");
//remove the following two lines if you like error message box popups
frmvalidator.EnableOnPageErrorDisplaySingleBox();
frmvalidator.EnableMsgsTogether();

frmvalidator.addValidation("name","req","Entrez votre nom svp"); 
frmvalidator.addValidation("email","req","Entrez votre adresse de courriel svp"); 
frmvalidator.addValidation("email","email","Format de courriel non valide.  Merci de vérifier votre adresse"); 
</script>
<script language='JavaScript' type='text/javascript'>
function refreshCaptcha()
{
	var img = document.images['captchaimg'];
	img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;
}
</script>
</body>
</html>


Quand j'envois le mail, soit que les accents s'affiche bien ds le mail mais pas bien si le code captcha n'est pas bien entré... bref, il faudrait que qqn test pour voir les différents problèmes...

MERCI!!!! Smiley biggol
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


J'ai rajouté ceci dans l'entête du formulaire... ne fonctionne toujours pas.
J'ai rajouté ce code également, cela regle un problème. Mais, si je conserve dans le headers le charset ... la mise en page du $body ne fonctionne pas... j'ai bien les accents, mais il ne fait aucun retour de chariot...


<input type="text" name="name" value='<?php echo htmlentities($name, ENT_QUOTES, 'UTF-8') ?>'>
Voila le code.. j'ai réglé le problème, comme un grand. Cela dit... des «\» s'affiche devant les « ' ». Je sais que c'est un caractère d’échappement. Des suggestions sur la facon de ne pas afficher ceci dans les messages envoyés par le visiteur ?


<?php 

session_start();
$errors = '';
$name = '';
$visitor_email = '';
$user_message = '';

if(isset($_POST['submit']))
{
	
	$name = $_POST['name'];
	$visitor_email = $_POST['email'];
	$user_message = $_POST['message'];
	///------------Do Validations-------------
	if(empty($name)||empty($visitor_email))
	{
		$errors .= "\n Name and Email are required fields. ";	
	}
	if(IsInjected($visitor_email))
	{
		$errors .= "\n Bad email value!";
	}
	if(empty($_SESSION['6_letters_code'] ) ||
	  strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)
	{
	//Note: the captcha code is compared case insensitively.
	//if you want case sensitive match, update the check above to
	// strcmp()
		$errors .= "\n Oups!  Mauvais code ... \n
		Veuillez inscrire les chiffres et les lettre dans le même ordre svp!";
	}
	
	if(empty($errors))
	{
		//send the email
		$to = "xx@xx.com";
		$subject="AIDE ET SUPPORT";
		$from = "xxx@xxx.com";
		$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
		
		
		/*
		$body = 
		"Bonjour $name, voici les informations transmises\r\n".  
		"Nom: $name\r\n".
		"Email: $visitor_email\r\n".
		"Message:\r\n ".
		"$user_message\r\n".
		"IP: $ip\n";	
		*/
		
		$body = "
<style>
label,a, body 
{
	font-family : Arial, Helvetica, sans-serif;
	font-size : 12px; 
}
.err
{
	font-family : Verdana, Helvetica, sans-serif;
	font-size : 12px;
	color: red;
}
</style>
</head>

<body>
<p>Bonjour $name,</p>
<p>Voici les informations envoyées :</p>
<table >
  <tr>
    <td ><strong>Nom :</strong></td>
    <td >$name</td>
  </tr>
  <tr>
    <td ><strong>Email :</strong></td>
    <td >$visitor_email</td>
  </tr>
  <tr>
    <td ><strong>Votre message :</strong></td>
    <td >$user_message</td>
  </tr>
  <tr>
    <td ><strong>Votre adresse IP</strong></td>
    <td >$ip</td>
  </tr>
</table>
<p>Merci de nous avoir contacté via ce formulaire. Nous vous répondrons le plus rapidement possible.</p>
<p>&nbsp;</p>
</body>
</html>
</body>
</html>

";
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .='Content-Type: text/html; charset="utf-8"'."\n";
		$headers .= "From: xxxx@xxx.net\r\n";
		$headers .= "Cc: $visitor_email\r\n";
		$headers .= "Reply-To: $visitor_email\r\n";
		$headers .='Content-Transfer-Encoding: 8bit';  
		
		mail($to, $subject, $body,$headers);
		
		header('Location: thank-you.html');
	}
}

// Function to validate against any email injection attempts
function IsInjected($str)
{
  $injections = array('(\n+)',
              '(\r+)',
              '(\t+)',
              '(%0A+)',
              '(%0D+)',
              '(%08+)',
              '(%09+)'
              );
  $inject = join('|', $injections);
  $inject = "/$inject/i";
  if(preg_match($inject,$str))
    {
    return true;
  }
  else
    {
    return false;
  }
}
?>
<!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" />

<!-- define some style elements-->
<style>
label,a, body 
{
	font-family : Arial, Helvetica, sans-serif;
	font-size : 12px; 
}
.err
{
	font-family : Verdana, Helvetica, sans-serif;
	font-size : 12px;
	color: red;
}
</style>	
<!-- a helper script for vaidating the form-->
<script language="JavaScript" src="scripts/gen_validatorv31.js" type="text/javascript"></script>	
</head>

<body>
<p>
  <img src="../../images/formulaire.gif" width="300" height="50"></p>
<p>
  <?php
if(!empty($errors)){
echo "<p class='err'>".nl2br($errors)."</p>";
}
?>
</p>
<div id='contact_form_errorloc' class='err'></div>
<form method="POST" name="contact_form" 
action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>"> 
<p>
<label for='name'>Nom: </label><br>
<input type="text" name="name" value='<?php echo htmlentities($name, ENT_QUOTES, 'UTF-8') ?>'>
</p>
<p>
<label for='email'>Courriel: </label><br>
<input type="text" name="email" value='<?php echo htmlentities($visitor_email) ?>'>
</p>
<p>
<label for='message'>Message:</label> <br>
<textarea name="message" rows=8 cols=30><?php echo htmlentities($user_message, ENT_QUOTES, 'UTF-8') ?></textarea>
</p>
<p>
<img src="captcha_code_file.php?rand=<?php echo rand(); ?>" id='captchaimg' ><br>
<label for='message'>Entrez le code ci-haut :</label><br>
<input id="6_letters_code" name="6_letters_code" type="text"><br>
<small>Code illisible? Cliquez <a href='javascript: refreshCaptcha();'>ici</a> pour en obtenir un nouveau.</small></p>
<input type="submit" value="OK" name='submit'>
</form>
<script language="JavaScript">
// Code for validating the form
// Visit  http://www.javascript-coder.com/html-form/javascript-form-validation.phtml
 
// for details
var frmvalidator  = new Validator("contact_form");
//remove the following two lines if you like error message box popups
frmvalidator.EnableOnPageErrorDisplaySingleBox();
frmvalidator.EnableMsgsTogether();

frmvalidator.addValidation("name","req","Entrez votre nom svp"); 
frmvalidator.addValidation("email","req","Entrez votre adresse de courriel svp"); 
frmvalidator.addValidation("email","email","Format de courriel non valide.  Merci de vérifier votre adresse"); 
</script>
<script language='JavaScript' type='text/javascript'>
function refreshCaptcha()
{
	var img = document.images['captchaimg'];
	img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;
}
</script>
</body>
</html>