Accents formulaire php

Eléphanteau du PHP | 19 Messages

20 sept. 2011, 11:03

Bonjour

Petit nouveau sur ce forum je viens vers vous pour apprendre et me perfectionner en php.
Je bataille depuis des semaines en vain sur un problème concernant un formulaire php ou les accents sont remplaçés par des symboles.

Ma page php essai "http://www.cambo-locations.net/cambo/t3/iralour/bb.php" contient la balise
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Le code php du formulaire ci-dessous et un marqueur Xiti
Encodage des caractères du navigateur / unicode (UTF-8)

Merci de vos conseils, pistes à suivre afin de régler ce soucis.
<?
if (isset($_POST['f_envoyer'])) {
    $email = trim($_POST['f_email']);
	$message = htmlentities($_POST['f_message']);
	$erreur_email = 0;
	$erreur_message = 0;
	$retour = "";
	$destinataire = "[email protected]";
	$sujet = "Location T3";
	$merci = "Merci.";
	if ($email == "") {
		$retour .= "Entrez votre adresse email.";
		$erreur_email = 1;
	} else {
		if (! eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,3}$",$email)) {
			$retour .= "L'adresse email n'est pas correcte.";
			$erreur_email = 1;
		}
	}
	if ($message == "") {
		$retour .= "Vous avez oublie votre message.";
		$erreur_message = 1;
	}
	if ($retour =="") {
		$contenu .= $email."\n";
		$contenu .= $message;
		mail($destinataire,$sujet,$contenu,"FROM:[email protected]");
		$retour = $merci;
		$email = "";
		$message = "";
	} 
} else {
	$email = "";
	$message = "";
}
?>


  <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" id="formulaire">
<p><span <? if ($erreur_email == 1){echo "class='erreur'";} ?>>Votre  email : </span></p>
<div><input name="f_email" type="text" id="f_email" size="40" maxlength="40"  value = "<? echo $email ?>" />
</div>
<p><span <? if ($erreur_message == 1){echo "class='erreur'";} ?>><br />
Votre message : </span></p>
<div>
  <textarea name="f_message" cols="55" rows="5" id="f_message" ><? echo $message ?></textarea>
</div>
<div><br />
<input type="submit" name="f_envoyer" value="Envoyer" />
</div>   
</form>
<p class='retour'> <? echo $retour; ?> </p> </div> <div id="adresse"> 

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

20 sept. 2011, 11:20

Salut,

C'est dans le mail le soucis ?

A tu regardé ceci faq-tutoriels/encodage-utf-t245062.html ?

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

Eléphanteau du PHP | 19 Messages

20 sept. 2011, 12:22

Merci pout ton aide :D
Oui le soucis est dans le mail, j'ai régardé la page que tu m'as envoyé, j'ai essayé avec .htaccess , pas de changements ...!

Eléphanteau du PHP | 19 Messages

22 sept. 2011, 08:22

Bonjour
Je fais remonter ce post, j'ai essayé de nombreuses choses, rien n'y fait, j'ai toujours ces caractères à la place des lettres accentuées.....

J'ai bien sur lu en long et en travers la page que m'a conseillé de lire Moogli
.htaccess
essayer plusieurs encodage, je suis en UTF-8
Contacter mon hébergeur pour savoir si il fallait intervenir au niveau du serveur, du fichier php.ini ou autre.... Pas de réponse

Je ne sais plus quoi faire :-(

Si vous avez des pistes ???

Merci
Bonne journée

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

22 sept. 2011, 11:21

c'est bien le contenu du message qui a des problèmes d'accents ? (quand tu le lit avec ton butineur mail ?

si oui à tu essayé d'indiquer le charset dans l’entête ?

il y a un exemple dans la documentation de la fonction mail de php :)

montre nous le code que tu a testé et le résultat que cela donne.

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

Eléphanteau du PHP | 19 Messages

22 sept. 2011, 22:21

c'est bien le contenu du message qui a des problèmes d'accents ? (quand tu le lit avec ton butineur mail ?

si oui à tu essayé d'indiquer le charset dans l’entête ?

il y a un exemple dans la documentation de la fonction mail de php :)

montre nous le code que tu a testé et le résultat que cela donne.

@+
Merci de ta réponse Moogli


Oui c'est bien le contenu qui à un problème d'accents.
J'ai mis une balise " <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />" dans la page du formulaire, "charset dans l’entête " ...???
Résultat du message &Atilde;&copy; &Atilde;&nbsp; &Atilde;&uml; pour é à è

Merci

Bonne soirée

Code testé
?

if (isset($_POST['f_envoyer'])) {
    $email = trim($_POST['f_email']);
	$message = htmlentities($_POST['f_message']);
	$erreur_email = 0;
	$erreur_message = 0;
	$retour = "";
	$destinataire = "[email protected]";
	$sujet = "Location T3";
	$merci = "Merci.";
	if ($email == "") {
		$retour .= "Entrez votre adresse email.";
		$erreur_email = 1;
	} else {
		if (! eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,3}$",$email)) {
			$retour .= "L'adresse email n'est pas correcte.";
			$erreur_email = 1;
		}
	}
	if ($message == "") {
		$retour .= "Vous avez oublie votre message.";
		$erreur_message = 1;
	}
	if ($retour =="") {
		$contenu .= $email."\n";
		$contenu .= $message;
		mail($destinataire,$sujet,$contenu,"FROM:[email protected]");
		$retour = $merci;
		$email = "";
		$message = "";
	} 
} else {
	$email = "";
	$message = "";
}
?>


  <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" id="formulaire">
<p><span <? if ($erreur_email == 1){echo "class='erreur'";} ?>>Votre  email : </span></p>
<div><input name="f_email" type="text" id="f_email" size="40" maxlength="40"  value = "<? echo $email ?>" />
</div>
<p><span <? if ($erreur_message == 1){echo "class='erreur'";} ?>><br />
Votre message : </span></p>
<div>
  <textarea name="f_message" cols="55" rows="5" id="f_message" ><? echo $message ?></textarea>
</div>
<div><br />
<input type="submit" name="f_envoyer" value="Envoyer" />
</div>   
</form>
<p class='retour'> <? echo $retour; ?>



"

ViPHP
AB
ViPHP | 5818 Messages

23 sept. 2011, 01:41

"charset dans l’entête " ...???
Cela veut dire :
header('Content-Type: text/html; charset=UTF-8');
tout en haut de ton code php.

(je viens de modifier le tuto sur l'utf-8 pour que cela soit plus clair).

Eléphanteau du PHP | 19 Messages

23 sept. 2011, 07:34

"charset dans l’entête " ...???
Cela veut dire :
header('Content-Type: text/html; charset=UTF-8');
tout en haut de ton code php.

(je viens de modifier le tuto sur l'utf-8 pour que cela soit plus clair).

Merci

Je viens d'ajouter cette ligne de code, surement au mauvais endroit car j'ai un message d'erreur

Warning: Cannot modify header information - headers already sent by (output started at /htdocs/public/www/cambo/t3/iralour/essai.php:6) in /htdocs/public/www/cambo/t3/iralour/essai.php on line 37
J'ai mis ce code au début
<?
header('Content-Type: text/html; charset=UTF-8');

if (isset($_POST['f_envoyer'])) {
    $email = trim($_POST['f_email']);
	$message = htmlentities($_POST['f_message']);
	$erreur_email = 0;
	$erreur_message = 0;
	$retour = "";

Bonne journée


BB

ViPHP
ViPHP | 2577 Messages

23 sept. 2011, 10:44

Warning: Cannot modify header information - headers already sent by (output started at /htdocs/public/www/cambo/t3/iralour/essai.php:6) in /htdocs/public/www/cambo/t3/iralour/essai.php on line 37
Il ne faut pas envoyer de texte au navigateur avant de lui envoyer des header (comme indiqué dans le message).
Voir essai.php ligne 37 pour trouver l'envoi de caractères (comme indiqué dans le message).

Eléphant du PHP | 275 Messages

23 sept. 2011, 11:37

Le problème est dans le mail, c'est donc dans les entetes du mail qu'il faut préciser qu'il est en utf-8

Eléphanteau du PHP | 19 Messages

23 sept. 2011, 14:20

Le problème est dans le mail, c'est donc dans les entetes du mail qu'il faut préciser qu'il est en utf-8
Bonjour

Merci a Mazarini et Popy

Pour le header j'ai si bien compris il faut que je le place en début de page juste aprés le <body> ...!

Pour les en-têtes du mail il faut préciser qu'il est en utf-8, mais la je bloque, à quel endroit du code le préciser et comment ??????

Merci

Bonne aprés midi

BB

ViPHP
ViPHP | 2577 Messages

23 sept. 2011, 14:28

Un petit effort pour l'utilisation de la fonction mail :
http://fr.php.net/manual/fr/book.mail.php

A mon avis, remplacer nContent-Type par n\Content-Type dans l'exemple.

Eléphanteau du PHP | 19 Messages

25 sept. 2011, 09:00

Bonjour

Je n'ai pas su résoudre mon problème, trop juste en php, merci à toutes les personnes qui m'ont aidées, je vais persévérer

Bon dimanche

BB

ViPHP
AB
ViPHP | 5818 Messages

25 sept. 2011, 20:30

Un autre lien que je trouve plus clair pour les débutants.

Donc à la place de
<?php
     $headers ='From: "nom"<[email protected]>'."\n";
     $headers .='Reply-To: [email protected]'."\n";
     $headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
     $headers .='Content-Transfer-Encoding: 8bit';

     if(mail('[email protected]', 'Sujet', 'Message de test', $headers))
     {
          echo 'Le message a bien été envoyé';
     }
     else
     {
          echo 'Le message n\'a pu être envoyé';
     }
?> 
...pour utiliser l'utf-8 dans les mail il suffit d'écrire :
<?php
     $headers ='From: "nom"<[email protected]>'."\n";
     $headers .='Reply-To: [email protected]'."\n";
     $headers .='Content-Type: text/plain; charset="utf-8"'."\n";
     $headers .='Content-Transfer-Encoding: 8bit';

     if(mail('[email protected]', 'Sujet', 'Message de test', $headers))
     {
          echo 'Le message a bien été envoyé';
     }
     else
     {
          echo 'Le message n\'a pu être envoyé';
     }
?> 

Eléphanteau du PHP | 19 Messages

27 sept. 2011, 08:05

Bonjour

Merci AB

J' ai essayé d'adapter mon formulaire avec les éléments que tu m'as communiqué à travers la page web qui en effet me parle mieux que celles visitées précédement, c'est plus simple :D

Mais le problème perdure, j'ai essayé d'autres scripts formulaire php en vain, le problème est le même.

Bonne journée

BB