Formulaire contact - Caractères spéciaux [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
mercredi 7 septembre 2016
Statut
Membre
Dernière intervention
2 avril 2021
-
Messages postés
2829
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
11 novembre 2019
-
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.

2 réponses

Messages postés
2829
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
11 novembre 2019
655
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.
Messages postés
10
Date d'inscription
mercredi 7 septembre 2016
Statut
Membre
Dernière intervention
2 avril 2021

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 ?
Messages postés
2829
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
11 novembre 2019
655
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
Messages postés
10
Date d'inscription
mercredi 7 septembre 2016
Statut
Membre
Dernière intervention
2 avril 2021

ça marche :)
Mille mercis
Messages postés
2829
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
11 novembre 2019
655
Ok @+