52 votes

Problème d'encodage du sujet de l'en-tête PHP

J'ai un problème avec mon script php envoi d'e-mail aux utilisateurs.

Il y a un problème avec l'encodage de l'e-mail que Lors de la réception d'un email de compte de messagerie, le sujet($subject) a des problèmes d'encodage comme des personnages comme a^£? ajouté à la fin de mon texte de l'objet? L'e-mail le contenu du message lui-même est très bien, juste la ligne d'objet?

J'ai cherché partout mais je ne trouve pas de réponse

C'est ma tête à l'aide de charset=utf-8 content-type-encoding: 8bit mais j'ai l'impression de rater quelque chose que ma ligne d'objet conserve ajouté ces étranges encodage de caractères à la fin

//set all necessary headers
$headers = "From: $sender_name<$from>\n";
$headers .= "Reply-To: $sender_name<$from>\n";
$headers .= "X-Sender: $sender_name<$from>\n";
$headers .= "X-Mailer: PHP4\n"; //mailer
$headers .= "X-Priority: 3\n"; //1 UrgentMessage, 3 Normal
$headers .= "MIME-Version: 1.0\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "Importance: 3\n";
$headers .= "Date: $date\n";
$headers .= "Delivered-to: $to\n";
$headers .= "Return-Path: $sender_name<$from>\n";
$headers .= "Envelope-from: $sender_name<$from>\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\n";

84voto

Gumbo Points 279147

Le caractère spécifique de l'encodage dans le Type de Contenu ne fait que décrire le codage de caractères du corps du message mais pas la tête. Vous devez utiliser les mots codés de la syntaxe avec le quoted-printable l'encodage ou le codage Base64:

encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

Vous pouvez utiliser imap_8bit pour le quoted-printable encodage et base64_encode pour l'encodage Base64:

"Subject: =?UTF-8?B?".base64_encode($subject)."?="
"Subject: =?UTF-8?Q?".imap_8bit($subject)."?="

21voto

Paul Norman Points 1006

mb_encode_mimeheader () pour les chaînes UTF-8 peut être utile ici.

-2voto

user2250504 Points 1

Enregistrez le fichier php avec le charset approprié.

Dans mon cas, dans Sublime Text, j’ai utilisé l’option suivante:

Fichier> Enregistrer avec codage> Western (ISO-8859-1) [pour le Portugais brésilien]

En faisant cela, vous n’avez besoin d’aucune commande.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X