Formulaire contact - Caractères spéciaux

Résolu/Fermé
ronisonmez Messages postés 10 Date d'inscription mercredi 7 septembre 2016 Statut Membre Dernière intervention 2 avril 2021 - Modifié par baladur13 le 7/09/2016 à 15:17
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 - 7 sept. 2016 à 18:59
Bonjour,

Je suis nouveau sur le site et j'ai un problème à régler.
Enfaite quand je remplis mon formulaire contact, lors de la réception des réponses du formulaire, les caractères spéciaux ne s'affichent pas correctement.

Je sais pas comment faire, j'ai jeté un coup d'oeil sur les plusieurs sites et j'ai fais qq'essaie mais ça marche toujours pas.

Vous pouvez m'aider SVP?
Merci d'avance

Voici mon code code PHP:

<?php 

/* 
|-------------------------------------------------------------------------- 
| Settings 
|--------------------------------------------------------------------------
/



define("EMAIL" , "xxxx@gmail.com"); 
define("SUBJECT" , "Demande d'information"); 

define("NAME_MSG" , "Merci de saisir votre nom"); 
define("EMAIL_MSG" , "Merci de saisir votre email"); 
define("EMAIL_WRONG" , "Merci de saisir une adresse email valide"); 
define("PHONE_MSG" , "Merci de saisir votre numéro de téléphone"); 
define("MESSAGE_MSG" , "Merci de saisir votre message"); 

/* 
|-------------------------------------------------------------------------- 
| Simple Sender Script 
|--------------------------------------------------------------------------
/


if( $_POST ) { 

/* check mandatory fields */ 
if( empty( $_POST['name'] ) ) { 
exit( NAME_MSG ); 
} 

if( empty( $_POST['email'] ) ) { 
exit( EMAIL_MSG ); 
} 

if( empty( $_POST['phone'] ) ) { 
exit( PHONE_MSG ); 
} 

if( empty( $_POST['message'] ) ) { 
exit( MESSAGE_MSG ); 
} 

/* validate email */ 
if ( !empty( $_POST['email']) && !preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $_POST['email'])) { 

exit( EMAIL_WRONG ); 

} 

/* create body message */ 
$message = ''; 

// Name 
$message.= 'Nom : ' . $_POST['name'] . ''; 

// Phone 
$message.= 'Téléphone : ' . $_POST['phone'] . ''; 

// Message 
$message.= 'Message : ' . $_POST['message'] . ''; 


/* send email */ 
$email = mail( EMAIL , SUBJECT , $message , "From: ".$_POST['name']." <".$_POST['email'].">\r\n" ."Reply-To: ".$_POST['email']."\r\n" ); 

/* callback for ajax */ 
if( $email ) { 
echo 'OK'; 
} else { 
echo 'ERROR'; } 
} 

?>


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
Modifié par animostab le 7/09/2016 à 17:30
salut

le problème vient de ce que tu n'a pas mis le header

Content-Type: text/html; charset="utf-8"'."\n";
si ton site est en utf-8

ou

Content-Type: text/html; charset=\"iso-8859-1\";
si ton site est en iso-8859-1

voir aussi la fonction php htmlentities qui converti les caractères spéciaux d'une chaine en entitées html
http://www.lephpfacile.com/manuel-php/function.htmlentities.php

N'oublie pas non plus fonction php stripslash() qui retire les anti slash d'échappement

et la fonction trim() a utiliser sur l'email (trim enlève les espaces en début et fin de chaine)

voila un peu de doc
https://a-pellegrini.developpez.com/tutoriels/php/mail/



Un petit merci vaut mieux qu'une grande ignorance !
Donc si votre sujet est résolu une réponse avec merci c'est pas de refus.
0
ronisonmez Messages postés 10 Date d'inscription mercredi 7 septembre 2016 Statut Membre Dernière intervention 2 avril 2021
7 sept. 2016 à 17:33
Merci pour ta réponse animostab.
Enfaîte mon site est en HTML5. Je sais pas il faut où insérer le code "Content-Type: text/html; charset="utf-8"'."\n"; "

Tu peux dire où il faut exactement il faut l’intégrer ?
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
Modifié par animostab le 7/09/2016 à 18:19
apres ."Reply-To: ".$_POST['email']."\r\n"

va voir le lien que j'ai mis "un peu de doc"
en fait tu devrais mettre tes headers en variable comme tu l'as fait avec $message
ce serait mieux

un exemple

     $to = 'tonemail@tonsite.com';
     $email_expediteur = $email; //mail expediateur
     $subject = 'formulaire'; //sujet du message
     $name = trim($_POST['name']);
  
     $headers = 'From: "'.$name.'" <'.$email.'>'."\n";
     $headers .= 'Return-Path: <'.$email.'>'."\n";
     $headers .= 'MIME-Version: 1.0'."\n";
     $headers .='Content-Type: text/html; charset="utf-8"'."\n"; 

  //ici tes variables $message

     mail($to, $subject, $message, $headers);


voila en gros
0
ronisonmez Messages postés 10 Date d'inscription mercredi 7 septembre 2016 Statut Membre Dernière intervention 2 avril 2021
7 sept. 2016 à 18:54
ça marche :)
Mille mercis
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
7 sept. 2016 à 18:59
Ok @+
0