Problème d'accents avec PHP

Bonjour,

J'ai un souci avec un script de récupération mail en PHP! Après envoi, les lettres accentuées dans la partie $message sont transformées. Je sais que c'est un problème d'encodage. Quelqu'un peut m'aider svp !

Voici le script :

<?php

define("WEBMASTER_EMAIL", 'moi@host.com');

error_reporting (E_ALL ^ E_NOTICE);

function ValidateEmail($email)
{
$regex = '/([a-z0-9_.-]+)'.
'@'.
'([a-z0-9.-]+){2,255}'.
'.'.
'([a-z]+){2,10}/i';

if($email == '')
return false;
else
$eregi = preg_replace($regex, '', $email);
return empty($eregi) ? true : false;
}

$post = (!empty($_POST)) ? true : false;

if($post)
{
$name = stripslashes($_POST['name']);
$email = trim($_POST['email']);
$subject = stripslashes($_POST['subject']);
$message = stripslashes($_POST['message']);

$error = '';

if(!$name || $name == "Name*")
$error .= 'Veuillez indiquer votre nom.<br />';

if(!$email || $email == "Email*")
$error .= 'Veuillez indiquer votre adresse email.<br />';

if($email && !ValidateEmail($email))
$error .= 'Adresse email invalide.<br />';

if(!$message)
$error .= "Veuillez entrer un message avant de poster.<br />";

if(!$error)
{
$mail = mail(WEBMASTER_EMAIL, $subject, $message,
"From: ".$name." <".$email.">\r\n"
."Reply-To: ".$email."\r\n"
."X-Mailer: PHP/" . phpversion());

if($mail)
echo 'OK';
}
else
echo '<div class="formstatuserror">'.$error.'</div>';
}

?>

Merci d'avance

3 réponses

  1. Rajoute dans le header du mail le jeu de caractères à utiliser (CHARSET ISO-8859-1), plusieurs exemples disponibles sur le net, je te laisse un peu bosser, comme ça tu auras toute la gloire d'avoir résolu ton problème par toi-même ;-)
    0
    1. J'ai essayé avec tout type d'en-tête, ça ne marche pas ?! J'ai même essayé avec la fonction filter... mais nada !!! Merci quand même ;)
      0
      1. Alors tu es le seul avec qui ça ne fonctionne pas, ce qui me paraît tout de même étrange...
        0
      2. ça n'aide pas beaucoup :/
        0
    2. J'ai légèrement modifié ton code :
      <?php 
      if(!$error) {
      	$headers = "From: ".$name." <".$email.">\r\n";
      	$headers .= "Reply-To: ".$email."\r\n";
      	$headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
      	$headers .= "X-Mailer: PHP/".phpversion());
      
      	if(mail(WEBMASTER_EMAIL, $subject, $message, $headers)) {
      		echo ' Message envoyé avec succès!';
      	} else {
      		echo "Un problème est survenu lors de l'envoi de votre message!";
      	}
      } else {
      	echo '<div class="formstatuserror">'.$error.'</div>';
      }
      ?>
      0
      1. Ça ne marche pas non plus ReDLoG! Je reçois un message de Parse error: syntax error, unexpected... Au fait, 'OK' transmet sur ma page HTML :

        <script type="text/javascript">

        $(document).ready(function(){
        $("#contact-form").submit(function(){
        var str = $(this).serialize();
        $.ajax({
        type: "POST",
        url: "contact.php",
        data: str,
        success: function(msg)
        {
        $("#formstatus").ajaxComplete(function(event, request, settings){
        if(msg == 'OK'){
        result = '<div class="formstatusok">Votre message a bien été envoyé.</div>';
        $("#fields").hide();
        }
        else{
        result = msg;
        }
        $(this).html(result);
        });
        }

        });
        return false;
        });
        });

        </script>

        Faudrait insérer le Content-type dans la partie qui suit, mais je ne sais pas comment l'écrire! J'ai essayé aisni, mais ça ne marche pas :

        $mail = mail(WEBMASTER_EMAIL, $subject, $message,
        "From: ".$name." <".$email.">\r\n"
        ."Reply-To: ".$email."\r\n"
        ."Content-type: text/html; charset=iso-8859-1' . \r\n"
        ."X-Mailer: PHP/" . phpversion());

        Les accents paraissent dans le $subject, c'est dans $message que ça coince. En tout cas, je te remercie beaucoup de ton intervention
        0