Кодировка Joomla UTF-8 не работает при открытии почты

у меня странная проблема с кодировкой, описанная следующим образом:

теперь отображается как Ã1 в теме письма. Электронная почта отправляется через функцию php mail.

при просмотре электронной почты в почтовом ящике, показано правильно. Однако, когда кто-нибудь открывает электронную почту, то "внезапно меняется на "1".

Uw contact met Meeùs

должно быть

Uw contact met Meeùs

Я уже использовал кодировку.

$emailsubject содержит выше упомянул тему письма.

$subject=$emailsubject;
$subject=$emailsubject;
$email_message=new email_message_class;
$email_message->SetEncodedEmailHeader("To",$to_address,$to_name);
$email_message->SetEncodedEmailHeader("From",$from_address,$from_name);
$email_message->SetEncodedEmailHeader("Reply-To",$reply_address,$reply_name);
$email_message->SetHeader("Sender",$from_address);
$email_message->SetEncodedHeader("Subject",$subject,"UTF-8");

в localhost он работает правильно, но на веб-сервере он работает неправильно. В webserver также кодировка установлена в utf-8 по умолчанию.

что я делаю неправильно? Спасибо заранее.

4 ответов


ваш код абсолютно правильный, в нем нет ошибки, но его другие вещи не кодируют. Поскольку мне нужны заголовки источников сообщений и сообщения, чтобы точно сказать вам, что происходит? У меня больше нет информации о том, отправляете ли вы электронное письмо в виде обычного текста или HTML. Но есть два вопроса, которые являются:

Отсутствует Mime-Версия

причина неправильного отображения символа-разработчики забывают описать Сообщение Как версию MIME. если сообщение отсутствует заголовок "Mime-Version", который требуется для стандартов интернет-почты, веб-почта полностью игнорирует заголовок" charset", искажая сообщение, если оно уже не находится в наборе символов UTF-8.

отображение темы со специальными символами

Как вы хотите показать тему с кодировкой utf-8, то вы должны кодировать тему как:

//Setting the Language as Japan
mb_language("ja");

//Converting the string into Japan Encoding
$subject = mb_convert_encoding($subject, "ISO-2022-JP","AUTO");

//Now convert the string to MIME Header type
$subject = mb_encode_mimeheader($subject);

если вышеупомянутые вещи не решают проблему, то попросите вас опубликовать необработанные заголовки электронной почты, как это поможет лучше решить проблему.


вы тестируете, чтобы изменить кодировку С.реврайт ?

AddDefaultCharset   UTF-8

поскольку вы указываете в комментариях, что используете Joomla 1.5, кажется, есть проблема с phpmailer() библиотека в этой версии, которая заставляет набор символов почтовика-на сообщении-отправлять вещи, используя настройку набора символов iso-8559-1. Чтобы исправить это, откройте ядро phpmailer() libary здесь:

[путь к вашей установке Joomla]/библиотеки/phpmailer/phpmailer.в PHP

около линии 50 нет $CharSet. Измените это на utf-8 если он еще не установлен на это:

  /**
   * Sets the CharSet of the message.
   * @var string
   */
  var $CharSet           = 'utf-8';

вы также можете сделать поиск вашей кодовой базы Joomla 1.5 для iso-8559-1 чтобы увидеть, если компонент или библиотека вынуждает iso-8559-1 кодирование где-то в цепочке кода.

и еще один параметр, который я бы рекомендовал проверить, -$Encoding по линии 63. По умолчанию используется значение 8bit, но я должен был изменить в прошлом, либо quoted-printable или base64 решить некоторые рассылки проблемы с конкретными настройками, над которыми я работал.

  /**
   * Sets the Encoding of the message. Options for this are "8bit",
   * "7bit", "binary", "base64", and "quoted-printable".
   * @var string
   */
  var $Encoding          = '8bit';

Я предлагаю вам использовать класс Joomla mailer, мог бы выглядеть так:

$mailer = JFactory::getMailer();
$mailer->setSender(array($from_address,$from_name));
$mailer->addRecipient($to_address, $to_name);
$mailer->setSubject($subject);
$mailer->setBody("BODY MESSAGE STRING");
$mailer->Send();

по умолчанию это utf8, и я не вижу причин не использовать его, если вы используете Joomla.