У меня странная проблема с кодировкой, описанная ниже:
ù теперь отображается как Ã в теме письма. Электронная почта отправляется через функцию php mail.
При просмотре электронной почты в почтовом ящике она отображается правильно. Однако, когда кто-либо открывает электронное письмо, ù внезапно изменяется на ù.
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 он работает нормально, но на веб-сервере он работает неправильно. В web-сервере также по умолчанию установлено значение utf-8.
Что я делаю неправильно? Заранее спасибо.
Ваш код верен, абсолютно нет ошибок, но его другие вещи не могут кодироваться. Как мне нужны заголовки и сообщения источника сообщений, чтобы точно рассказать, что происходит? У меня нет дополнительной информации о том, отправляете ли вы электронное письмо как обычный текст или HTML. Но, как правило, есть две проблемы:
Причина неправильного отображения символа – разработчики забывают описать сообщение как версию MIME. если в сообщении отсутствует заголовок «Mime-Version», который требуется для стандартов электронной почты Интернета, Webmail полностью игнорирует заголовок «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);
Если вышеупомянутые проблемы не решают проблему, попросите вас опубликовать заголовки RAW электронной почты, поскольку это поможет лучше решить проблему.
Вы проверяете изменение кодировки с помощью .htaccess?
AddDefaultCharset UTF-8
Поскольку вы указываете в комментариях, что используете Joomla 1.5, кажется, что существует проблема с библиотекой phpmailer()
в этой версии, которая заставляет набор символов phpmailer()
отправления – отправить сообщение, используя настройку набора символов iso-8559-1
. Чтобы исправить это, откройте основную библиотеку phpmailer()
:
[путь к установке Joomla] /libraries/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
ли компонент или библиотеку кодирование 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 = 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.