Page 1 sur 1

[Résolu] Php, retour à une page de confirm + encodage mail

Publié : 24 avr. 2008, 19:00
par Nicosmos
Salut, tant qu'on y est, un deuxième petit problème :)
J'ai fait un formulaire qui envoi des mails, et puis qui redirige vers une page qui confirme l'envoi. J'ai utilisé header, juste après mail. La fonction header est utilisé comme ça :

Code : Tout sélectionner

header("location: page-de-confirm.html");
Je ne sais pas si header est le mieux pour faire ça, en tout cas j'ai trouvé cette fonction à plusieurs reprises sur des tutos :P ... Tout a bien fonctionné la première fois, par contre, maintenant, bien que je reçoive bel et bien le mail, j'ai toujours un message d'erreur qui s'affiche et qui est du à la fonction header :

Code : Tout sélectionner

Warning: Cannot modify header information - headers already sent by (output started at /-chemin-vers-la-page-/mail.php:1) in /-chemin-vers-la-page-/mail.php on line 8
Voilà le code en entier :

Code : Tout sélectionner

<?php
$pour= "adresse@mail";
$entete= "Reply-To: $Mail";
$entete = "From: $Nom <$Mail>";
$sujet= "Contact";
$contenu= "De : $Nom \nAdresse : $Mail \nMessage : $Message";
mail($pour, $sujet, $contenu, $entete);
header("location: page-de-confirm.html");
?>
Je précise que le tout est herbergé chez Free ... est-ce que ça ne viendrait pas de lui ? :?

Merci,
Nico :)

Publié : 24 avr. 2008, 23:14
par Benoit
Tu es sûr qu'il n'y a pas un blanc avant l'ouverture de ta balise

Code : Tout sélectionner

<?php
?

Publié : 25 avr. 2008, 08:03
par calimo
ou bien un BOM en utf-8 ? Typiquement, des données ont déjà été écrites, et envoyées au navigateur, donc les entêtes sont terminées, donc forcément tu ne peux plus les modifier...

Publié : 25 avr. 2008, 10:31
par Nicosmos
A priori, le problème était que le fichier était encodé en UTF-8 ... C'est bizarre que ça ne marche pas dans cet encodage ... je continue à faire quelques tests avant de mettre en résolu :)

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5

Publié : 25 avr. 2008, 13:42
par Asumbaa
Tu devais alors avoir un BOM comme l'a intuité Calimo.

Il faudra que tu règles ton éditeur pour ne pas inclure de BOM au début des fichiers UTF-8.

Publié : 25 avr. 2008, 14:13
par Nicosmos
Ah oui en effet ... J'ai encodé sans BOM et ça fonctionne, merci :)
Qu'est ce que le BOM ? A quoi sert t'il ?

Edit: Dernier petit problème, qui a un rapport avec l'encodage aussi. Si le mail envoyé (depuis un formulaire HTML dans une page en UTF-8) contient des accentuations, le message que je reçoit à des erreurs d'encodage (les caractères sont remplacés par d'autres caractères spéciaux). Quelqu'un connait une solution ?

Publié : 25 avr. 2008, 15:05
par calimo
La solution, c'est de savoir et de déclarer l'encodage à toutes les étapes de la chaine, y-compris dans les entêtes l'email envoyé :wink:

Pour le BOM : http://fr.wikipedia.org/wiki/Marque_d'ordre_des_octets :P

Edit: en français, le BOM, c'est mieux :P

Publié : 25 avr. 2008, 18:05
par Nicosmos
La solution, c'est de savoir et de déclarer l'encodage à toutes les étapes de la chaine, y-compris dans les entêtes l'email envoyé
J'ai ajouté un header "Content-Type" pour les mails envoyés comme ceci :

Code : Tout sélectionner

Content-Type: text/html; charset=UTF-8
C'est à dire en Php :

Code : Tout sélectionner

$entete = "Content-Type: text/html; charset=UTF-8";
Mais l'affichage du courielleur reste le même. Est-ce que Thunderbird (et autres) savent reconnaitre les différents types d'encodage (et en changer quand on leur demande avec Content-Type) ? :?

Edit> Argh, non désolé, ça fonctionne ! :D J'éditais le mauvais fichier :oops:

Publié : 26 avr. 2008, 08:42
par calimo
Nicosmos a écrit :Edit> Argh, non désolé, ça fonctionne ! :D J'éditais le mauvais fichier :oops:
Content que tu ait pu résoudre ton problème :D

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.14) Gecko/20080418 Firelimace/7.10 Firefox/2.0.0.14