Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

42 réponses
Avatar
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\r\n";

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\r\n";

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


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

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

$body="Stage 2009\nPrenom + Nom : $nom\nSociete : $societe\nPoste :
$poste\nAdresse : $adresse\nEmail : $email\nTelephone : $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...

10 réponses

1 2 3 4 5
Avatar
Bruno Desthuilliers
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...).
Avatar
METIS
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...
Avatar
METIS
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...
Avatar
METIS
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...
Avatar
METIS
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...
Avatar
Bruno Desthuilliers
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".
Avatar
METIS
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...
Avatar
METIS
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...
Avatar
Olivier Miakinen
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
Avatar
Bruno Desthuilliers
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.
1 2 3 4 5