Formulaire contact - Caractères spéciaux

Résolu
ronisonmez Messages postés 10 Statut Membre -  
animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   738
     
    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
  2. ronisonmez Messages postés 10 Statut Membre
     
    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
    1. animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   738
       
      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
    2. ronisonmez Messages postés 10 Statut Membre
       
      ça marche :)
      Mille mercis
      0
    3. animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   738
       
      Ok @+
      0