problème avec les accents dans un envoi d'email par PHP

Le
METIS
Bonjour,
Bon, désolé, on en a déjà parlé mais moi, le soudoué du code, j'y arrive
pas.
Avec le code ci-dessous, je me fais envoyer un formulaire en PHP (récupéré
je ne sais plus où).
Le problème, c'est que les accents donnent
Nathalie Mazé dans le champ De de l'email reçu
et dans l'email lui même, j'ai comme résultat soit
Téléphone : téléphone
soit
Téléphone : téléphone
en fonction de ce que je mets dans la ligne :
$headers .= "Content-type: text/plain; charset=UTF-8";

Comme je n'y connais que couic, c'est au pif.
Et au pif, après 36 essais, j'arrive à rien.

Merci à celui qui m'aidera et merci à ceux qui supportent ma nullité
indécrotable.

code

<?php
extract($_POST,EXTR_OVERWRITE);
if(isset($_POST['captchaResult']))
{
session_start();
$_POST['captchaResult'] = strtolower($_POST['captchaResult']);
$_SESSION['captchaResult'] = strtolower($_SESSION['captchaResult']);
if($_POST['captchaResult'] $_SESSION['captchaResult'])
{ //captcha OK on envoi le message
$nom=$HTTP_POST_VARS['nom'];
$mail=$HTTP_POST_VARS['mail'];

/////voici la version Mine
$headers = "MIME-Version: 1.0";

//////ici on détermine le mail en format texte
//$headers .= "Content-type: text/plain; charset=iso-8859-1"; ligne
neutralisée
$headers .= "Content-type: text/plain; charset=UTF-8";


////ici on détermine l'expediteur et l'adresse de réponse
$headers .= "From: $nom <$mail>Reply-to : $nom <$mail>X-Mailer:PHP";

$subject="Stage 2009";
$destinataire="moi@machin.fr";

$body="Stage 2009Prenom + Nom : $nomSociete : $societePoste :
$posteAdresse : $adresseEmail : $emailTelephone : $telephone" ;
mail($destinataire,$subject,$body,$headers);
include("merci.php");
}
else
{
//captcha faux
include("erreur.php");
}
}
?>

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Oranges
Vos réponses Page 3 / 5
Trier par : date / pertinence
Bruno Desthuilliers
Le #22062081
Bruno Desthuilliers a écrit :
METIS a écrit :
Bruno Desthuilliers wrote:
Tu veux pas me donner l'adresse de ton formulaire, là ? Je connais
quelques spammeurs que ça intéresserait...






(snip)
Bon, comment fait-on alors ?




(snip)

Dernier point : on n'utilise *JAMAIS* directement la moindre variable
venant de l'extérieur - à moins bien sûr d'aimer se faire pirater d'une
façon ou d'une autre.



Ah oui, aussi : si tu ne sais pas et ne veux pas savoir coder, _ne le
fait pas_. Il y a des gens dont c'est le métier (avec le problème
habituel de trouver ceux qui sont compétents...).
METIS
Le #22062071
Bruno Desthuilliers wrote:
Ah oui, aussi : si tu ne sais pas et ne veux pas savoir coder, _ne le
fait pas_. Il y a des gens dont c'est le métier (avec le problème
habituel de trouver ceux qui sont compétents...).



Mais... mon cher Bruno, avec plaisir de faire bosser des potes (ou pas
potes) sur des coups.
Je ne demande que ça.
Je lance donc l'appel :
Qui peut me préparer ça et quel est le tarif..?
Je verai ensuite avec mon "client" si ça lui convient question prix.

Pour ce qui est de coder, je n'arrive pas à me concentrer sur le moindre
tuto PHP.
J'ai acheté je ne sais combien de livres de 500 ou 800 pages, je n'ai jamais
dépasser les 50 premières pages.
Le code, c'est pas mon truc.

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Oranges...
METIS
Le #22062061
Bruno Desthuilliers wrote:
...
Ca on s'en fiche totalement - ce que tu comprendrais probablement
si tu avais la moindre idée de ce qu'est un script PHP.



Mais...méééé...
J'ai la moindre idée de ce qu'est un script PHP.
J'ai une idée de la force que ça a.
Mais je ne sais pas comment ça marche dans le fond.

Bon, je vais essayer ton script, déjà pour voir si je ne suis pas trop nul
en copier/coller (;o)))))))))

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Oranges...
METIS
Le #22062051
Olivier Miakinen wrote:
Ainsi, tu remplaceras :
----------------------------------------------------------
<?php
extract($_POST,EXTR_OVERWRITE);
----------------------------------------------------------

par :
----------------------------------------------------------
<?php
header('Content-Type: text/html; charset=UTF-8');
extract($_POST,EXTR_OVERWRITE);
----------------------------------------------------------



Voilà, j'ai refais 3 essais avec UTF-8, ISO-8859-1 et ISO-Latin-1
Ca donne la même chose :

Nom : é (le "é")
Prénom : é (le "é")
Email : test
Téléphone : test
Objet : test ISO-8859-1

Et le champ De contient é pour les 3

Voilà, pour le reste, donnez moi votre prix !! (;o))))

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Oranges...
METIS
Le #22062041
Bruno Desthuilliers wrote:
La solution usuelle consiste à rechercher la présence de "rn" et/ou
d'entêtes mails suspects dans les variables que tu récupères ...
j'en profite d'ailleurs pour le soumettre à la critique impitoyable de
ce groupe...):



Bon, j'ai testé, ya une coui...
Parse error: syntax error, unexpected T_VARIABLE in
/homez.42/xxxx/www/envoixxxxx.php on line 6

La line 6 c'est :
$is_suspect = FALSE;


--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Oranges...
Bruno Desthuilliers
Le #22062031
METIS a écrit :
Bruno Desthuilliers wrote:
La solution usuelle consiste à rechercher la présence de "rn" et/ou
d'entêtes mails suspects dans les variables que tu récupères ...
j'en profite d'ailleurs pour le soumettre à la critique impitoyable de
ce groupe...):



Bon, j'ai testé, ya une coui...
Parse error: syntax error, unexpected T_VARIABLE in
/homez.42/xxxx/www/envoixxxxx.php on line 6

La line 6 c'est :
$is_suspect = FALSE;




Et l'erreur est la fin de la ligne précedente:

$bad = "/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)?/i"

à laquelle il manque un ";" :

$bad = "/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)?/i";

NB : code extrait d'une function contenant d'autres trucs qui n'ont rien
à faire ici, d'où erreur lors du "ménage".
METIS
Le #22062011
Bruno Desthuilliers wrote:
Et l'erreur est la fin de la ligne précedente:
$bad = "/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)?/i"
à laquelle il manque un ";" :



Ah oui, j'aurais pu le voir si j'avais bien regardé !!! (;o))))))

Bon, ça envoie, pas de différence.
normal, c'est juste des truc pour sécuriser l'envoi.
Donc on attend les avis sur la sécurité du truc ?

Ceci dit, j'ai toujours le même problème d'encodage avec les accents et
là... J'ai lu des lignes de documents divers, toujours pas l'ombre d'une
raison.

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Oranges...
METIS
Le #22061991
METIS wrote:
...
Le problème, c'est que les accents donnent...
Nathalie Mazé dans le champ De de l'email reçu



Petite question :
Est-ce que ça peut venir d'un réglage chez l'hébergeur ?
(C'est un petit site 60gp chez OVH de base, j'ai rien touché au niveau du
manager)

A priori non, il n'y a que dans la BdD qu'il y a un réglage éventuel de
l'encodage...

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Oranges...
Olivier Miakinen
Le #22061981
Le 08/12/2008 17:22, je répondais à METIS :

Je n'en crois rien. ;-)

Je crois qu'en changeant de charset entre UTF-8 et (par exemple)
ISO-8859-1, tu peux avoir soit :
- Téléphone : téléphone (Latin1)
- T?l?phone : téléphone (UTF-8)
soit :
- Téléphone : t?l?phone (UTF-8)
- Téléphone : téléphone (Latin1)



D'après la suite des échanges, nous sommes dans le premier cas. Donc ton
fichier PHP est codé en Latin1 (ou en cp1252) et tes données t'arrivent
en UTF-8.

Les différentes possibilités que tu as sont donc :

1) Convertir ton fichier PHP de Latin1 en UTF-8, par exemple en le
lisant dans un éditeur de texte puis en faisant Save-As, format UTF-8.
Dans ce cas tu envoies un Content-Type UTF-8.

2) Laisser ton fichier en Latin1, mais convertir à la volée les chaînes
constantes de Latin1 en UTF-8 :
$str = utf8_encode("Téléphone : ") . $telephone;
Dans ce cas tu envoies un Content-Type UTF-8.

3) Convertir les données dynamiques à la volée en Latin1 :
$str = "Téléphone : " . utf8_decode($telephone);
Dans ce cas tu envoies un Content-Type ISO-8859-1.

Cordialement,
--
Olivier Miakinen
Bruno Desthuilliers
Le #22061941
METIS a écrit :
Bruno Desthuilliers wrote:
Et l'erreur est la fin de la ligne précedente:
$bad = "/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)?/i"
à laquelle il manque un ";" :



Ah oui, j'aurais pu le voir si j'avais bien regardé !!! (;o))))))

Bon, ça envoie, pas de différence.
normal, c'est juste des truc pour sécuriser l'envoi.
Donc on attend les avis sur la sécurité du truc ?



Non, maintenant tu testes. Suffit de créer un second formulaire qui
poste à l'adresse du premier en essayant d'injecter des entêtes mails
dans les champs nom et email.

Ceci dit, j'ai toujours le même problème d'encodage avec les accents et
là... J'ai lu des lignes de documents divers, toujours pas l'ombre d'une
raison.



Olivier t'a déjà donné toutes les réponses.
Publicité
Poster une réponse
Anonyme