Передача специальных символов в mailto body взрывает JavaScript - PullRequest
2 голосов
/ 07 ноября 2011

У меня есть приложение на C # ASP.NET, которое создает массив значений JavaScript для некоторой информации профиля пользователя.На стороне клиента я использую jQuery / JavaScript для чтения массива и создания ссылки mailto.Некоторые поля могут содержать специальные символы, например ' & = / \ ".

Вот код C #:

private String generateElementsArray(){
  StringBuilder sb = new StringBuilder();
  sb.Append("var currentElements = { currentUserName: '");
  sb.Append(currentUserName);
  sb.Append("', currentUserEmail: '");
  sb.Append(currentUserEmail);
  sb.Append("', currentSite: '");
  sb.Append(currentSite);
  sb.Append("', currentTitle: '");
  sb.Append(currentTitle);
  sb.Append("'}");
  return sb.ToString();
}    

Я записываю значение вышеприведенного метода на страницу, которая создает этот JavaScript:

<script type="text/javascript">var currentElements = { currentUserName: 'Alex', currentUserEmail: 'myemailID', currentSite: 'Helpdesk', currentTitle: 'Phone User Guides & Troubleshooting'}</script>

Затем я генерируюссылка на электронную почту, используя этот код JavaScript, прикрепляющий тег привязки к элементу на странице:

function generateEmailTo(){
  var body = currentElements.currentUserName + ' has shared a page with you on the intranet.%0A%0APage Title: %22' +
    currentElements.currentTitle.replace("&","and")  + '%22%0A' + $(location).attr('href').replace('#',''); 
  var subject = currentElements.currentUserName + ' has shared a page with you on the intranet';
  var mailto = 'mailto: ?body=' + body + '&subject=' + subject;
  var anchor = '<a href="' + mailto + '"></a>';

  $("#email-placeholder").wrap(anchor);
}
....

<img id="email-placeholder" title="Send this page to a friend." src="<%= baseUrl %>/SiteAssets/media/icons/email-icon.gif"/>

Для основного текста mailto я заметил, что для этого требуется только небольшой набор закодированных символов, напримеркак %22 для двойных кавычек и %0A для разрывов строк.Как передать специальные символы, такие как одинарные кавычки, амперсанды и т. Д., В основной текст mailto и обеспечить поддержку JavaScript?

1 Ответ

9 голосов
/ 07 ноября 2011

Mailto - это схема URI, поэтому все ее компоненты должны быть закодированы в URI. Вы можете использовать функцию JavaScript encodeURIComponent для кодирования компонентов mailto. Пожалуйста, смотрите следующий пример:

function buildMailTo(address, subject, body) {
    var strMail = 'mailto:' + encodeURIComponent(address)
                   + '?subject=' + encodeURIComponent(subject)
                   + '&body=' + encodeURIComponent(body);
    return strMail;
}
var strTest = buildMailTo('abc@xyz.com', 'Foo&foo', 'Bar\nBar');
/* strTest should be "mailto:abc%40xyz.com?subject=Foo%26foo&body=Bar%0ABar" */
window.open(strTest);

Надеюсь, эта помощь.

...