php mail - özel karakter

4 Cevap php

Ben php bir İspanyol sitesi var. Bu bir mail vücut konusu "Solicitud de cotización" içeren ancak konu Solicitud de cotizacià ³ n gibi sıcak posta kutusunda görünür. Ama posta bölümünde doğru görünür oluyor. Ben bu sorunu önlemek nasıl. Herhangi biri bu biliyor mu?

4 Cevap

Eğer kullandığınız her türlü metin kodlamayı konu başlığı kodlamak gerekir. http://search.cpan.org/~dankogai/Encode-2.39/lib/Encode/MIME/Header.pm ve http://www.faqs.org/rfcs/rfc2047.html hangi Böylece hakkında konuşmak bakın.

Esasen, konu satırı aşağıdaki gibi görünmelidir:

Konu:?? Solicitud de = UTF-8 Q cotizaci = C3 = B3n =

Sonra MIME bilen herhangi MUA doğru karakter kümesini kullanarak, doğru konuyu işlemek gerekir.

EDIT: Bu RFC2822 alıntı neden gerekli olduğunu posta ileti başlıkları için karakter kodlaması olarak ASCII belirtir olduğunu belirtmekte yarar var. Ayrıca çizgiler uzun 72 karakterden fazla olamaz gerektiğini belirtir, böylece katlama gerekli olabilir ve RFC (2) 822 posta sistemleri işlenmek için mukadder mesajları üreten yaparken bunu dikkate almalıdır. Sağladığınız gibi Q kodlama daha az yer kaplıyor çünkü sonunda, B kodlama kullanımı, bir dize için bir anlamda büyük bir anlaşma yapmaz (ve bu konuda, sadece gerçekten karakterleri kullanın kelimelerin bir çalışma alıntı yapmak istiyorum ASCII karakter kümesi dışında).

Bu bütün dize B kodlama ile sadece kaba kuvvet için technically mümkün, ama genellikle nedeniyle savurgan olma kötü formu konuşma, ve çok daha büyük olasılıkla 9,999 karakter sabit sınırını aşacaktır olduğunu eğer hiç RFC (2) 822 standartlar bu şekilde tarafından belirlenen tek bir satırda uzun bir konu satırına sahip.

Hai! =) Konuyu kodlamak için bunu yapmak zorunda:

$subject = 'Solicitud de cotización';

// =?UTF-8?B?U29saWNpdHVkIGRlIGNvdGl6YWNpw7Nu?=
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';

PHP 5.3 kullanıyorsanız + yerine quoted_printable_encode() kullanabilirsiniz:

$subject = 'Solicitud de cotización';

// =?UTF-8?Q?Solicitud de cotizaci=C3=B3n?=
$subject = '=?UTF-8?Q?' . quoted_printable_encode($subject) . '?=';

Ben aynı sorunu, artık bir sınıf kullanarak benim için iyi işler bir yol vardı (phpMailer):

<?php
require_once('class.phpmailer.php');
$mail           = new PHPMailer(); // defaults to using php "mail()"

// Here's the code that allows special chars in subject and body
$mail->CharSet  = 'UTF-8';
$mail->Encoding = 'quoted-printable';

// From and reply data
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
// Receiver
$address        = 'whoto@otherdomain.com';
$mail->AddAddress($address, 'John Doe');
// Message
$mail->Subject  = 'PHPMailer Test Subject via mail(), basic';
$mail->Body     = 'Message sent from website';
// Attachment(s)
$mail->AddAttachment('images/phpmailer.gif');
$mail->AddAttachment('images/phpmailer_mini.gif');

// Try to send mail
if( ! $mail->Send())
{
  echo 'Mailer Error: ' . $mail->ErrorInfo;
}
else
{
  echo 'Message sent!';
}
?>

charset e-posta başlıklarını utf-8 ayarını deneyin:

charset=UTF-8

Ya da bakın:

UTF8 ready php mail function

UTF8_mail(
“fromname <my@email.com>”,
“First Last <your@email.com>”,
“Solicitud de cotización”,
“Κείμενο Text”,
“”,
“Solicitud de cotización<hidden_friend@email.com>”
);