Экранирование и отображение в почтовом клиенте (ссылка mailto)

У меня есть такая функция JavaScript:

var strBody = encodeURI(window.location.href);
var strSubject = encodeURI(document.title);
var mailto_link = "mailto:?subject=" + encodeURI(strSubject) + "&body=" + strBody;

Этот код выполняется в событии гиперссылки onclick и открывает почтовый клиент (mailto://). Однако в заголовке страницы есть несколько символов &, но заголовок подхватывается только до первого символа &. URL-адрес всегда подбирается.

Каков правильный JavasSript, чтобы избежать & и отобразить его в строке темы почтового клиента?


person gss5    schedule 01.07.2011    source источник


Ответы (2)


var encoded_body = encodeURIComponent(window.location.href);
var encoded_subject = encodeURIComponent(document.title);
var mailto_link = "mailto:?subject=" + encoded_subject + "&body=" + encoded_body;

должен сделать это (encodeURIComponent вместо encodeURI).

В исходном коде вы также неправильно дважды закодировали subject (один раз в строке 2, а затем снова в строке 3).

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

person Daniel Cassidy    schedule 01.07.2011
comment
Не используйте escape, он устарел, потому что не работает должным образом. - person Quentin; 01.07.2011
comment
@Quentin Хорошо заметил. Я как бы украл ваш ответ сейчас, извините :). - person Daniel Cassidy; 01.07.2011
comment
Это тоже не сработало? За такие названия, как a&b&c, я могу получить только a. - person gss5; 01.07.2011
comment
@ gss5: у меня это работает, я тестировал в Chrome и IE в сочетании с Outlook. Возможно, вы столкнулись с несовместимостью с конкретным почтовым клиентом? - person Daniel Cassidy; 01.07.2011
comment
@ gss5: Похоже, ваш почтовый клиент ведет себя странно. Какие почтовые клиенты вы тестировали? - person Flimzy; 01.07.2011

Вам нужен encodeURIComponent, а не encodeURI.

person Quentin    schedule 01.07.2011