Подтвердить что ты не робот

Специальные символы в UTF8 mailto: subject = link и Outlook

Я нахожусь на последних этапах повторного кодирования сайта, который формально использовал кодировку символов 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.

К сожалению, клиент хочет сохранить эту прямую ссылку по электронной почте, несмотря на то, что у нее есть действующая почтовая форма прямо под ней.

Есть ли счастливое решение?

4b9b3361

Ответ 1

Если вы используете utf-8, попробуйте следующее:

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>

Ответ 2

Причина, по которой строка темы иногда искажается, заключается в том, что когда вы указываете кодировку, она не применяется к заголовку электронной почты. Строка темы находится в заголовке электронной почты. Здесь используется функция кодирования UTF8 в строке темы:

function EncodeSubject($_subject)
{
    $encodedSubject = str_replace("&quot;", '"', $_subject);
    $encodedSubject = preg_replace('/[^x09\x20-\x3C\x3E-\x7E]/e', 'sprintf("=%02X", ord("$0"));', $encodedSubject);
    $encodedSubject = str_replace(' ', '_', $encodedSubject);
    return ="?utf-8?q" . $encodedSubject . "?=";
}

Ответ 3

Вам нужно проверить следующее

1) Код HTML

<meta contentType="text/html; charset=UTF-8"/>

2) Настройка браузера для IE Просмотр → Кодирование → Юникод (UTF-8)

3) Тип контента/тип MIME должен быть " application/x-www-form-urlencoded"