2009-09-24 5 views
2

Я пытаюсь создать ссылку mailto, которая содержит символы с французским акцентом в качестве темы и тела электронной почты. Оба HTML и URI, кодирующие символы, не работают. Вот мой код:Broken Accented Characters в MailTo Link

<a href="mailto:%20?subject=ce%20titre%20est%20cass%C3%A9.&body=travaux%20deja!%20cesser%20d'%C3%AAtre%20t%C3%AAtu">SEND EMAIL</a> 

Тот же результат происходит без кодирования URI:

<a href="mailto:?subject=ce titre est cassé&body=travaux deja! cesser d'être têtu">SEND EMAIL</a> 

Независимо от того, как я это сделать, то новое сообщение электронной почты открывается с разбитыми символами. URI-кодированные пробелы и разрывы строк работают нормально, но все, что не является ANSI, нарушено. Я должен отметить, что я тестирую английскую и французскую версии MS Outlook 2007. Кто-нибудь знает, как заставить это работать?

ответ

2

Все в заголовке письма (в том числе предмета) должно быть MIME кодированными в соответствии с этим RFC,

http://www.ietf.org/rfc/rfc2047.txt

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

Правильно закодированный текст выглядит так,

=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= 

EDIT: Попробуйте это, чтобы увидеть, если это то, что вы хотите,

<a href="mailto:[email protected]?subject=%3d%3fISO-8859-1%3fB%3fY2UgdGl0cmUgZXN0IGNhc3Pp%3f%3d&Content-Type=text%2fplain%3b+charset%3dISO-8859-1&body=travaux%20deja!%20cesser%20d'%C3%AAtre%20t%C3%AAtu">SEND EMAIL</a> 

Заменить электронную почту с вашим адресом.

+0

ОП не формирует электронное письмо в этом примере. Он создает ссылку mailto. Эта спецификация не имеет никакого отношения к его контексту. – Asaph

+2

Пожалуйста, прочитайте RFC перед тем, как сделать downvote. Этот RFC связан с заголовками, а не с почтовыми службами. Объект должен быть закодирован таким образом, чтобы правильно отображаться в почтовом агенте. –

+0

Я считаю, что это ответственность агента электронной почты, а не страницы html. Если вы также закодировали его на html-странице, я думаю, вы закончите с дважды закодированной строкой. – Asaph

1

Получил это! Это может быть или не быть ошибкой в ​​Microsoft Outlook/Entourage. Я изменил свой почтовый читатель по умолчанию на Mail.app, и он прекрасно работает с urlencoding. Вероятно, ошибка (возможно) влияет на один из двух акцентированных символов e в вашем примере. Возможно, Outlook/Entourage не корректно обрабатывают символы miltibyte UTF8?

+0

Я думаю, что вы правы, см. Ссылку в моем комментарии выше. Кажется, что на стороне читателя электронной почты в спецификации URL нет определенной операции. Mail.app, возможно, просто «превыше и дальше» ради удобства использования. Но если Outlook 2007 не может этого сделать, он недостаточно надежный для ввода в производство. Если я не слышу о параметре magic & charset = UTF-8, этот мертв. – AyexeM

+0

Более подробное сообщение здесь: http://stackoverflow.com/questions/974558/outlook-not-processing-multi-byte-characters-when-using-mailto – AyexeM

1

Например, с MooTools (но может быть другая структура или даже 'сырые' JavaScript), я обычно делаю это, и это работает Mac/PC с основными браузерами/клиентами:

window.addEvent('domready', function(){ 
    //get the links to encode 
    var links_to_encode = $$('#page ul li a'); 

    links_to_encode.each(function(link){ 
     //check if the link has an href 
     var original_href = link.get('href'); 
     if(original_href){ 
      //substitute it with the encoded version 
      link.set('href',encodeURI(original_href)); 
     } 
    }); 
});//fine domready 

Bye!

3

В IE 8 предусмотрена настройка. Инструменты -> Опции -> Дополнительно. В разделе International отметьте опцию «Использовать UTF-8 для почтовых ссылок».

В Windows XP этот параметр по умолчанию отключен. В Windows 7 он включен по умолчанию.

Надеюсь, что это поможет

Смежные вопросы