8797 sujets

Développement web côté serveur, CMS

Quand des mails me sont envoyés à partir du lien contact les accents ou tout autre lettre hors norme n'apparaissent pas normalement.
Je cherche de partout, j'essaye pleins de solutions mais je n'y arrive pas.

Alors voici les codes :

1er fichier :
parametres.php

<?php
// Tableau contenant les adresses e-mail de contact
$Tab_e_mail = Array('xxxxxx@orange.fr');
?>

2eme fichier:
contact.php


<?php
//Include des parametres
include 'parametres/parametres.php';
//recup variable formulaire
if(!isset($_POST['objet']) && !isset($_POST['message']) && !isset($_POST['mail'])){// si les variables n'existent pas
echo $msgmail;
?>

<form action="index.php?pages=contact" method="post">
<table width="auto" align="center">
<tr>
<td width="229">
<h6>Objet<font color="#FFFF00"> *</font></h6></td>
<td width="auto"><input type="text" name="objet" id="objet" size="40px" /> </td>
</tr>
<tr>
<td width="229">
<h6>Votre adresse e-mail<font color="#FFFF00"> *</font></h6></td>
<td>
<input type="text" name="mail" id="mail" size="40px" />
</td>
</tr>
<tr>
<td width="229" valign="top">
<h6>Message<font color="#FFFF00"> *</font></h6></td>
<td>
<br />
<textarea name="message" cols="30" rows="10"></textarea></td>
</tr>
<tr>
<td width="229">
</td>
<td >
<center><input type="submit" name="valider" id="valider" value="Envoyer"/></center>
</td>
</tr>
</table>
</form>


<?php
} elseif($_POST['objet']!='' && $_POST['message']!='' && $_POST['mail']!=''){ // si les variables existent et sont remplies
if(eregi("^[a-zA-Z0-9]+[._a-zA-Z0-9-]*@[a-zA-Z0-9]+[_a-zA-Z0-9-]*\.[a-zA-Z]{2,}$",$_POST['mail'])){
//j'envoi le mail à mon mail qui est défini dans parametre.php avec les variables

$headers = 'From: ' . $_POST['mail'];// pour que soonlinex n'apparaîsse pas
for($i=0;$i < count($Tab_e_mail);$i++){// je vais chercher l'adresse de réception de mail dans paramètre
mail($Tab_e_mail[$i],$_POST['objet'],$_POST['mail'] . ' ' . $_POST['message'],$headers);
}

//le mail a été bien envoyé
$msgmail = '<br/>';
$msgmail = $msgmail . '<center><font color=\'#ffffff\'>Message bien reçu.<br />Je vous contacterai dans les plus brefs délais.<br />Merci</font>';
$msgmail = $msgmail . '<br/>';
$msgmail = $msgmail . '<br/><a href="index.php?pages=accueil">Retour &agrave; l\'accueil</a></center>';
$msgmail = $msgmail . '<br/>';
echo $msgmail;
}else{
//l'adresse e-mail n'est pas valide donc msg d'erreur
$msgmail = '<br/>';
$msgmail = $msgmail . '<center><font color=\'#FFFF00\'>L\'adresse e-mail n\'est pas valide.<br />Veuillez recommencer.</font>';
$msgmail = $msgmail . '<br/>';
$msgmail = $msgmail . '<br/><a href="index.php?pages=contact">Retour à la page de contact</a></center>';
$msgmail = $msgmail . '<br/>';
echo $msgmail;
}
} else{ //gestion des erreurs de remplissage de formulaire
$erreur= '';
//objet absent
if ($_POST['objet']==''){
$erreur= 'objet';
}

//mail absent
if ($_POST['mail']==''){
if($erreur==''){
$erreur= $erreur . 'mail';
}elseif($_POST['message']!=''){
$erreur= $erreur . ' et mail';
}else{
$erreur= $erreur . ', mail';
}

}

//message absent
if ($_POST['message']==''){
if ($erreur==''){
$erreur= $erreur . 'message';
} else{
$erreur= $erreur . ' et message';
}

}
//affichage du message d'erreur + formulaire de mail
$msgmail = '<br/>';
$msgmail = $msgmail . '<center><font color=\'#FFFF00\'>Vous n\'avez pas rempli le(s) champ(s) suivant : ' . $erreur . '.</font>';
$msgmail = $msgmail . '<br/>';
$msgmail = $msgmail . '<br/><a href="index.php?pages=contact">Retour à la page de contact</a></center>';
$msgmail = $msgmail . '<br/>';
echo $msgmail;

}
?>


Pouvez-vous m'aider.
Merci d'avance.

Softarg
Merci pour votre intérêt.
L'encodage qui est dans Head.
Si c'est ca, le voici :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Softarg
Salut,

D'après ce que j'ai pu voire sur la doc PHP, tu peux déclarer l'encodage dans le header.
Exemple tiré de la doc PHP pour la fonction mail :

<?php
function mail_utf8($to, $subject = '(No subject)', $message = '', $from) {
$header = 'MIME-Version: 1.0' . "\n" . 'Content-type: text/plain; charset=UTF-8'
. "\n" . 'From: Yourname <' . $from . ">\n";
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}
?>

;)
Salut,

Ça sent l'incohérence d'encodage à des kilomètres : tu as probablement un encodage utf-8 déclaré, sur un contenu qui est en fait en iso, ou un truc du genre. Vérifie que le contenu du fichier php qui crée le mail est bien enregistré en utf-8 (sans BOM) et que les données qui lui parviennent sont aussi en utf-8 (en particulier si elles viennent d'une base de données).
Pour pas avoir de problème d'accents en utf8 :
1. enregistrer/convertir tous ses fichiers (*.html,*.js,*.php etc..) en utf8 sans dom
2. au moment de la connexion à ta base de donnée exécuté la requête : mysql_query("SET NAMES 'utf8'")or die(mysql_error());
3. le header <meta http-equiv="content-type" content="text/html; charset=UTF-8">

Personnellement les accents m'ont beaucoup pris la tête au début puis j'ai décidé de m'organiser un peu pour ne plus jamais avoir ce problème et bien ça marche !
Pourtant il n'y a pas grand chose à faire...
Modifié par Su4p (29 Dec 2010 - 11:08)