Rechercher : dans
Par :

Problème caractères accentués formulaire

Dernière réponse le 1 déc 2008 à 15:00:22 Woody69, le 27 nov 2008 à 18:46:05 
 Signaler ce message aux modérateurs

Bonjour,

J'ai mis en place un formulaire de contact qui fonctionne, mais lorsque je reçois les mails, les caractères accentués et autres genre é è ç ' etc. Sont déformés.

Voici le script. Quelle fonction dois-je insérer et à quel endroit ?

<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = 'webmasters@scouts-caluire.info';

// copie ? (envoie une copie au visiteur)
$copie = 'non'; // 'oui' ou 'non'

// Messages de confirmation du mail
$message_envoye = "Merci !
Votre message a bien été envoyé, nous vous répondrons dans les meilleurs délais. <a href=\"index.html\">Cliquez ici pour continuer</a>.";
$message_non_envoye = "Erreur : l'adresse e-mail semble invalide ! <a href=\"javascript:history.back()\">Cliquez ici pour recommencer</a>.";

// Messages d'erreur du formulaire
$message_erreur_formulaire = "Vous devez d'abord <a href=\"javascript:history.back()\">envoyer le formulaire</a>.";
$message_formulaire_invalide = "Erreur ! Vérifiez que tous les champs sont bien remplis et que l'email entré est correct.";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/

// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
{
// formulaire non envoyé
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};

/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};

// formulaire envoyé, on récupère tous les champs.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : '';
$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = str_replace("'","'",$message);
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);

// Envoi du mail
if (mail($cible, $objet, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="javascript:history.back()">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>

Merci pour vos réponses !

Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « Problème caractères accentués formulaire » dans :
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...

1

giheller, le 27 nov 2008 à 19:10:51
  • +1

Bonsoir

essayez de mettre ceci en tout début de script

<?php
header('Content-Type: text/html; charset=ISO-8859-1');
?>
JL,  m'enfin c'est juste mon avis @+, ce qui se conçoit bien s'ennonce clairement;
se faire aider, n'est pas faire faire son travail

Répondre à giheller

2

Woody69, le 28 nov 2008 à 14:30:09

Merci, mais cela ne fonctionne toujours pas. merci quand même pour la réponse !

Répondre à Woody69

3

giheller, le 28 nov 2008 à 17:35:01

Bonsoir,
essayons de savoir où cela se produit.
je supose que le message est bien configuré avent l'envoi. (faire un echo avant l'envoi)
et si c'est le cas le problème poourrait venir du serveur de messagerie chez ton FAI, ou alors à l'arrivée du message sur ton logiciel de messagerie (par exemple incredimail mal configuré).
JL,  m'enfin c'est juste mon avis @+, 

Répondre à giheller

4

 Woody69, le 1 déc 2008 à 15:00:22

Non, en fait c'est résolu, grâce à ta première solution qui consistait à insérer :

header('Content-Type: text/html; charset=ISO-8859-1');

Merci beaucoup donc !

:)

Répondre à Woody69