Problème de caractères spéciaux

Henry
Invité n'ayant pas de compte PHPfrance

01 avr. 2011, 14:49

Bonjour,

Je suis débutant en PHP et j'aurai besoin de votre aide.

Pour le formulaire de contact de mon site j'utilise le script ci-joint.
Mon problème vient des caractères accentués reçus dans le mail, mais aussi de ceux affichés par le message "echo" dans la page html, je n'arrive pas à faire que les deux soient bons ?

Merci d'avance !
<?php 
		  // Encodage d'une page html en iso-8859-1
          header('Content-Type: text/html; charset=iso-8859-1');
		  
		  // Mettre votre adresse email ci-dessous :
		  $to = '[email protected]';
		  
		  // Les information de l'expéditeur (NE PAS MODIFIER !)
		  
		  $name = stripslashes($_POST['name']); // récupère le nom de l'expéditeur
		  $email = stripslashes($_POST['email']); // récupère l'adresse mail de l'expéditeur
		  
		  // Le sujet
		  $subject .= "Sujet : ".stripslashes($_POST['subject']);
		  
		  
		  // Le message que vous allez recevoir dans votre boîte mail (NE PAS MODIFIER SI VOUS NE MAITRISEZ PAS LE SUJET !)

		  $msg  = "From : $name \r\n";  // le nom de l'expéditeur
		  $msg .= "e-Mail : $email \r\n"; // l'adresse mail de l'expéditeur
		  $msg .= "$subject \r\n\n"; // le sujet
		  $msg .= "Message : \r\n\n".stripslashes($_POST['message'])."\r\n\n";  // le message
		  
		  // Informations optionnelles

		  $msg .= "Informations sur l'expéditeur : \r\n\n"; // Titre
		  $msg .= "Adresse IP : ".$_SERVER["REMOTE_ADDR"]."\r\n"; // adresse IP de l'expéditeur
		  $msg .= "Navigateur : ".$_SERVER["HTTP_USER_AGENT"]."\r\n"; // informations sur le navigateur
		  $msg .= "Page d'expédition : ".$_SERVER["HTTP_REFERER"]; // lien d'expédition
		  
		  // Fin Informations optionnelles
		  
				
		  if  (mail($to, $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n")){
		  
		  echo "<h3>Thanks! / Merci !</h3>"; // message affiché si le mail est bien envoyé
		  
		  }else{
			  
		  echo "<h3>echoue</h3>";  // message affiché s'il y a une erreur
		  
		  }
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 avr. 2011, 14:54

Salut,

A tu verifier l'encodage de ton fichier (qu'il soit bien iso) idem pour la page d'origine ainsi que le charset du formulaire ?

A tu regarder le tuto sur l'encodage ( bon c'est utf-8 faut juste appliquer pour l'iso).


@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

01 avr. 2011, 15:55

Merci de ta réponse, mais je m'y perds un peu...

La page html qui contient le formulaire est encodée en : UTF-8
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Elle envoie les données à la page PHP ci-dessus.

Faut-il que cette page PHP contienne uniquement le script , ou le script doit-il être mis dans les balises body d'une page html ?

<!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" />
<title>Document sans titre</title>
</head>

<body>
<?php

?>
</body>
</html>

ViPHP
AB
ViPHP | 5818 Messages

01 avr. 2011, 19:22

Faut être cohérent et choisir le même encodage pour toutes les pages.

Je vois dans ton code php : header('Content-Type: text/html; charset=iso-8859-1'); et dans ton code html : <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />.

C'est l'un ou l'autre pas les deux. Relis autant que nécessaire le tuto sur le lien que t'a donné moogli.

Henry
Invité n'ayant pas de compte PHPfrance

02 avr. 2011, 11:42

J'ai suivi vos conseils et ça marche, merci !

J'ai une autre question, comment faire pour remplacer le message "echo" par un lien vers une autre page ?
if  (mail($to, $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n")){
                  
                  echo "<h3>Thanks! / Merci !</h3>"; // message affiché si le mail est bien envoyé
                  
                  }else{
                          
                  echo "<h3>echoue</h3>";  // message affiché s'il y a une erreur

Eléphant du PHP | 101 Messages

03 avr. 2011, 11:39

if  (mail($to, $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n")){
                 
                  header('Location: tapage.php'); //redirection vers tapage
		  exit(); 
                 
                  }else{
                         
                  echo "<h3>echoue</h3>";  // message affiché s'il y a une erreur

Henry
Invité n'ayant pas de compte PHPfrance

03 avr. 2011, 14:01

Merci de ton aide, mais hélas ça me marche pas...
La page que j'appelle est une page .html, mais je ne pense pas que cela joue ?

Eléphant du PHP | 101 Messages

03 avr. 2011, 14:50

je ne connais pas la structure de ta page mais il semblerait que ton code php soit intégré dans la structure de ta page html
<html><body>
<?php ... ?>
</body></html>

dans ce cas c'est normal que la fonction header ne fonctionne pas étant donné qu'il ne doit y avoir aucun caractère envoyé avant
pour fonctionner il faudrait que ta page ressemble à
<?php ... ?>
<html> etc

Henry
Invité n'ayant pas de compte PHPfrance

03 avr. 2011, 17:19

C'était bien ça ! Merci !