IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

mail(), UTF-8 et caractères spéciaux


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut mail(), UTF-8 et caractères spéciaux
    Bonjour,

    je galère depuis quelques jours à envoyer via PHP un mail avec des caractères UTF-8, comme "à" ou même "已更新", à chaque fois j'obtiens n'importe quoi dans le mail

    j'ai biens les en-têtes necessaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $headers.= 'MIME-Version: 1.0'."\n";
      $headers.= 'Content-Transfer-Encoding: 8bit'."\n";
      $headers.= 'Content-Type: '.$args['content_format'].'; charset="utf-8"'."\n";
    je précise que les chars viennent soit d'un formulaire d'une page HTML UTF-8 ou d'une base de donnée en UTF-8 aussi (si j'affiche dans la navigateur le contenu du mail avant envoi il est très bien)

    en regardant le code source de mails envoyés depuis hotmail (qui evidement sait y faire ^^) j'ai vu des choses du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =E1=9E=9F=E1=9F=80=E1=9E=9C=E2=80=8B=E1=9E=97=E1=9F=85=E2=80=8B=E1=9E=9A=E1=
    =9E=BC=E1=9E=94=E2=80=8B=E1=9E=90=E1=9E=8F
    à la place des caractères spéciaux

    quel codage est-ce et comment l'obtenir en PHP ?

    merci

  2. #2
    Membre actif Avatar de greg91
    Homme Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Points : 208
    Points
    208
    Par défaut
    Salut,

    il te manque peut être un base64_encode quelque part ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    ce n'est pas la même chose base64

    là on dirait plutôt de l'hexadécimal

  4. #4
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Ton fichier (par exemple index.php) doit aussi être bien encodé (utf8 sans BOM).
    Et pourtant... Elle tourne.
    http://www.djib.me

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    le fichier en question ne contient aucun caractère spécial (ce qui empêche Notepadd+ d'encoder en UTF8 sans un tweak au passage), et il m'avait pourtant semblé que l'encodage des fichiers "de traitement" n'avait pas d'influence

    mais ok je vais essayer, mais tu penses que je ne devrais encoder que le fichier qui envoie le mail ou tous ceux qui sont inclus dans le programme (une grosse dizaine) ?

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    j'ai convertis tous les fichier en UTF-8, comme je m'en doutais ça ne change rien

    bon mais je sais comment il faut faire : il faut avoir cet espèce d'encodage hexa (tous les webmails l'utilisent c'est surement pas pour rien)

    vraiment personne ne sait ce que c'est ?

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    en fait greg91 avait raison même si il ne répondait pas à la bonne question ^^

    quand je disais que tous les webmails utilisent cet encodage c'était en fait Hotmail et Alice

    à côté de ça Gmail utilise... base64, pour l'utiliser il ne fait pas mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Transfer-Encoding: 8bit
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Transfer-Encoding: base64
    en bien utiliser base64_encode sur le contenu

    c'est en fait la meme technique qu'on peu trouver pour le sujet du mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $subject = '=?UTF-8?B?'.base64_encode($subject).'?=';
    sauf que je n'avais trouvé nulle-part comment l'appliquer au corps

    au final ça fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      // subject
      $subject = '=?UTF-8?B?'.base64_encode($subject).'?=';
     
      // headers
      $headers = 'From: '.$from."\n";
      $headers.= 'MIME-Version: 1.0'."\n";
      $headers.= 'Content-Transfer-Encoding: base64'."\n";
      $headers.= 'Content-Type: text/html; charset="utf-8"'."\n";
     
      // content
      $content = base64_encode($content);
      $content = wordwrap($content, 70, "\n", true);
     
      // send mail
      $result = mail($to, $subject, $content, $headers);

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    pour changer quand on trouve une alternative à un problème, 5 minutes plus tard on trouve la solution originale

    ce encodage dont je parlais au début est Quoted-Printable, qui à l'avantage de pas encoder les caractères ASCII

    qui s'utilise comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $headers.= 'Content-Transfer-Encoding: Quoted-Printable'."\n";
    $content = quoted_printable_encode($content);
    je trouve quand meme dingue que tous les blogs qui parlent de caractères spéciaux dans les mails ne mentionnent aucun de ces deux encodages, m'en vais faire un tuto moi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fichier UTF-8 et caractères spéciaux
    Par Royd938 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 10/12/2008, 22h30
  2. utf-8 comparaison caractères spéciaux
    Par jboll dans le forum Langage
    Réponses: 3
    Dernier message: 04/11/2008, 21h44
  3. Réponses: 8
    Dernier message: 13/12/2006, 18h17
  4. [Mail] Envoyé des caractères spéciaux par mail
    Par Oberown dans le forum Langage
    Réponses: 1
    Dernier message: 16/03/2006, 23h55
  5. [Mail] Envoie de caractère spéciaux par mail() ?
    Par Oberown dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2005, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo