Rechercher : dans
Par :

Accents et Charset dans formulaire PHP

Dernière réponse le 15 avr 2009 à 20:08:19 lT4_, le 13 avr 2009 à 23:21:02 
 Signaler ce message aux modérateurs

Bonjour,

J'ai vraiment besoin d'aide sur un soucis d'accents dans un formulaire de contact en PHP.
Je m'explique :
Je fais un site internet pour un ami, et dans la page de contact j'utilise un formulaire dans lequel je récupère des données comme le nom, la société, l'email et le message du visiteur.
J'utilise un charset utf-8 pour ma page, mais un ISO-8859-1 dans l'entête du message. Le soucis : je ne comprends vraiment pas pourquoi mes accents ne sont pas pris en compte et pourquoi je vois des \n \r au lieu de retours chariots...
De l'ordre général, quelles sont les fonctions (et dans quel ordre) et charset à adopter dans toutes les situations? J'aimerais avoir un code sur lequel je pourrais me baser pour mes prochains formulaires... Merci de votre aide !

Voici mon code :

<?php include_once("include/connexion_bdd.php"); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="style.css" />
    <link rel="icon" type="image/x-icon" href="images/favicon.ico" />
	<title>Mon site - Contact</title>
</head>

<body>
	
    <div id="corps">
			
            <?php 	$page = 6;
            		include('include/header.php');
			?>


		<div id="corps_contenu">
        
                <div id="bloc_formulaire"><br />				
                <center><h4>Formulaire de contact</h4></center>
                    
				<?php
                    
                    // Inclusion de la fonction de vérification de mail.
                    include("fonctions.php");
                    
                    // Définition des variables dans le mail.
                            $nom = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['nom'])));
                            if(isset($_POST['envoyer']))	
                                {	if(isset($_POST['societe']))
                                        $societe = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['societe'])));
                                    else
                                        $societe = "Inconnue";
                                }
                            $email = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['email'])));
                            $objet = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['objet'])));
                            $message_envoi = nl2br(utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['message_envoi']))));
                            
                            
                    // Création des headers !
                            $headers ='From: "'.$nom.'"<'.$email.'>'."\n";
                            $headers .='Reply-To: '.$email.''."\n";
							$headers  .= 'Mime-Version: 1.0'."\r\n";
                            $headers .='Content-type: text/html; charset=ISO-8859-1'."\r\n";
 							$headers  .= "\r\n";
                    
                
                
                    // Vérification formulaire bien rempli !	
                            if(isset($_POST['envoyer']))
                            {
                                if( (empty($nom) || empty($email) || empty($objet) || empty($message_envoi)))
                                    $verif = 1;
                                
                                elseif(strlen($message_envoi) <= 20)
                                    $verif = 2;
                                
                                elseif (verif_mail($email) == false)
                                    $verif = 3;
                                
								elseif ($_SERVER["HTTP_REFERER"] != "contact.php" || strstr($nom, "http://") || strstr($societe, "http://") || strstr($email, "http://") || strstr($objet, "http://") || strstr($message_envoi, "http://") )
				   				$verif = 4; // Sécurité...
								
                                elseif((!empty($nom) || !empty($email) || !empty($objet) || !empty($message_envoi))) 
                                    $verif = 5;
                        
                                
                                switch ($verif)
                                {
                                    case 1 : $message_erreur = "<span class='msg_erreur'>Vous devez remplir tous les champs !</span>"; break;
                                    case 2 : $message_erreur = "<span class='msg_erreur'>Votre message doit faire au moins 20 caract&egrave;res.</span>"; break;
                                    case 3 : $message_erreur = "<span class='msg_erreur'>Votre adresse mail est invalide !</span>"; break;
                                    case 4 : $message_erreur = "<span class='msg_erreur'>Par mesure de sécurité, l'envoi est impossible...</span>"; break;
									
                                    // Tout est correct, ENVOI DU MAIL !!
                                    case 5 : $message_final = "Monsieur ".$nom.", entreprise ".$societe.", vous a laiss&eacute; un message :\n".$message_envoi;
                                             $succes_envoi = 1;
                                             
                                             if(mail('monmail', $objet, $message_final, $headers))
                                             $message_erreur = "<br /><span class='msg_succes'>Votre message &agrave; bien &eacute;t&eacute; envoy&eacute;. Nous vous recontacterons dans les plus brefs d&eacute;lais.<br />L'&eacute;quipe.</span>";
                                             else
                                             $message_erreur = "<br /><span class='msg_erreur'>Erreur lors de l'envoi du mail. Veuillez réessayer ultérieurement.</span>";
                                             break;
                                             
                                }
                            }
                
                ?>  
				
                
				<form action="" method="post" name="formulaire_contact">
                    		
                <?php	if($succes_envoi == 1) echo $message_erreur.'<br /><br />';
						else {
				?>
                
                <?php if(isset($message_erreur))
						echo $message_erreur.'<br /><br />';
				?>
                
                <br /><label for="nom">Votre nom :</label>
                <input type="text" name="nom" id="nom" maxlength="30" <?php echo "value='".$nom."'"; ?> /><br />
                
                <label for="societe">Soci&eacute;t&eacute; (Facultatif) :</label>
                <input type="text" name="societe" id="societe" maxlength="30" <?php echo "value='".$societe."'"; ?> /><br />
                
                <label for="email">Adresse Email :</label>
                <input type="text" name="email" id="email" maxlength="30" <?php echo "value='".$email."'"; ?> /><br /><br />
                
                <label for="objet">Objet :</label>
                <input type="text" name="objet" id="objet" maxlength="30" <?php echo "value='".$objet."'"; ?> /><br />
                
                <label for="message_envoi">Votre message :</label>
                <textarea name="message_envoi" id="message_envoi" rows="" cols="" ><?php echo $message_envoi; ?></textarea><br /><br />
                

               	<label for="submit">Valider :</label>
                <input type="submit" name="envoyer" value="Envoyer mon message" id="submit" />
                
                <?php
						}
				?>
                        
                </form>
                </div>
                
		</div>
        
        
        <div id="right">
        	<h3>Contactez le groupe </h3>
    
                <p> <!-- Texte intro au formulaire de contact! -->
                        <?php 	$req_contact = mysql_query("SELECT texte FROM contact LIMIT 0,1");
								while($contact = mysql_fetch_array($req_contact) )
                        		{	echo nl2br($contact['texte']);	}
						?>                
                </p>
        </div>
		
        
        <?php include("include/footer.php"); ?>
		
        
        
    </div> <!-- Corps-->


<div class="space"></div> <!-- Correspond à l'espace de fin de page -->


</body>
</html>
Configuration: Windows Vista
Firefox 3.0.8

Meilleures réponses pour « Accents et Charset dans formulaire PHP » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

IpIpIpIpOne, le 13 avr 2009 à 23:31:15

Salut !

Essaye ptet d'utiliser utf8_encode() plutôt qu' utf8_decode, ça me parait plus logique. Enfin, je me trompe peut-être !

Cordialement,

IpIpIp Ipone
Terriens Unis pour Sauver la Planète Terre

Répondre à IpIpIpIpOne

2

lT4_, le 14 avr 2009 à 09:17:40

Bonjour IpIpIpIpOne,

Merci de ton aide, j'ai remplacé tous mes utf8_decode() par des utf8_encode(), mais je crois que c'est encore pire... :/

Voici le résultat obtenu, sur une seule ligne (Alors que j'ai tapé des entrées dans mon textarea...) :

Monsieur Toto, entreprise TotoCorp, vous a laissé un message : Petit test encore sur les accents :\r\n\r\nààééùù


Heeelp =(

Répondre à lT4_

3

lT4_, le 14 avr 2009 à 09:29:38

Alors, petite nouveauté :

Je viens de mettre toute la page en ISO-8859-1, et j'ai viré toute fonction encode / decode en utf8.
J'obtiens un résultat plus propre, mais malheureusement j'obtiens toujours des \n \r dans mon mail...
Y'a t'il un rapport avec ma fonction htmlspecialchars? Ou bien ma fonction nl2br est t'elle mal placée?
Pour rappel :

$message_envoi = nl2br(mysql_real_escape_string(htmlspecialchars($_POST['mess­age_envoi'])));

Et voici ce que j'obtiens :

Monsieur Toto2, entreprise TotoCorp, vous a laissé un message : Encore petit test :) :) :)\r\n\r\nééààùùè

Répondre à lT4_

4

lT4_, le 14 avr 2009 à 13:29:12

Re bonjour tout le monde,

Je pense avoir résolu mon problème, mais il laisse place à un nouveau problème... :/
Lors du traitement de mon message dans le textarea, j'ai supprimé le mysql_real_escape_string(), ce qui supprime mes \n et \r dans le mail reçu, et je peux donc voir mes retour à la ligne.

Voici la ligne de code qui traite mon message :

$message_envoi = utf8_decode(trim(nl2br(htmlspecialchars($_POST['message_envo­i']))));


Maintenant, mon problème est le suivant : Comment sécuriser ma BDD tout en gardant mes retours chariot dans le message ?

Répondre à lT4_

5

lT4_, le 15 avr 2009 à 17:29:08

Up please ! =(

Répondre à lT4_

6

patachon, le 15 avr 2009 à 18:27:16

Y'a un truc que j'ai pas pigé dans ce que tu dis.

mysql_real_escape_string() s'utilise avant l'insertion dans une table, pas pour l'envoi d'un email...

Répondre à patachon

7

 lT4_, le 15 avr 2009 à 20:08:19

Hum d'accord, je pensais qu'il fallait la mettre quand même...
Merci de l'info!
Donc selon toi, inutile de protéger davantage mon $_POST['message_envoi'] ??

Répondre à lT4_
Collection CommentÇaMarche.net