Ответ 1
Если вы используете utf-8, попробуйте следующее:
<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>
Я нахожусь на последних этапах повторного кодирования сайта, который формально использовал кодировку символов iso-8859-1, но теперь UTF-8 повсюду.
Проблема в том, что раздел темы ссылки mailto href не работает с Outlook, когда используются специальные символы. Я получаю обычные искаженные представления символов, указывающие на очевидную проблему кодирования символов при нажатии ссылки и всплывающее окно новой почты в Outlook.
Я попытался rawurlencode() исправить проблему, но это, похоже, не работает с Outlook...
<a href="mailto:[email protected]?subject=<?=rawurlencode($subj);?>">send email</a>
Итак, тогда подумал, что Outlook должен настаивать на другой кодировке и попытаться сначала декодировать строку subjectf-8... [/p >
<a href="mailto:[email protected]?subject=<?=rawurlencode(utf8_decode($subj));?>">send email</a>
Бинго! Отлично работает. Но теперь это происходит не во всем: (
Я не могу найти решение, которое работает на всех почтовых клиентах.
Он работал нормально во всех почтовых клиентах, когда вся страница отображалась в iso-8859-1. Но не тогда, когда содержимое страницы - utf-8.
К сожалению, клиент хочет сохранить эту прямую ссылку по электронной почте, несмотря на то, что у нее есть действующая почтовая форма прямо под ней.
Есть ли счастливое решение?
Если вы используете utf-8, попробуйте следующее:
<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>
Причина, по которой строка темы иногда искажается, заключается в том, что когда вы указываете кодировку, она не применяется к заголовку электронной почты. Строка темы находится в заголовке электронной почты. Здесь используется функция кодирования UTF8 в строке темы:
function EncodeSubject($_subject)
{
$encodedSubject = str_replace(""", '"', $_subject);
$encodedSubject = preg_replace('/[^x09\x20-\x3C\x3E-\x7E]/e', 'sprintf("=%02X", ord("$0"));', $encodedSubject);
$encodedSubject = str_replace(' ', '_', $encodedSubject);
return ="?utf-8?q" . $encodedSubject . "?=";
}
Вам нужно проверить следующее
1) Код HTML
<meta contentType="text/html; charset=UTF-8"/>
2) Настройка браузера для IE Просмотр → Кодирование → Юникод (UTF-8)
3) Тип контента/тип MIME должен быть " application/x-www-form-urlencoded"