javascript - 将特殊字符传递给 mailto 正文会破坏 JavaScript

标签 javascript jquery html mailto

我有一个 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 代码生成电子邮件链接,将 anchor 标记附加到页面上的元素:

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 满意?

最佳答案

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);

希望这对您有所帮助。

关于javascript - 将特殊字符传递给 mailto 正文会破坏 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8034149/

相关文章:

html - 使用 HTML5 视频跟踪 move/调整大小事件?

javascript - 如何在javascript代码中使用笛卡尔坐标计算多边形面积?

jquery - 如何在 ionic 2 Angular 应用程序中包含 jQuery

html - 如何水平对齐3个div和中间div的一个div底部

javascript - 定位div并获取外部js文件工作onload

javascript - 获取标题的高度并在滚动到标题之外时显示顶部导航

javascript - Puppeteer 无法上传文件,出现 TypeError : Failed to fetch

javascript - 如何使用 NestJS 命名法写下 mongoose 的嵌套模式

javascript - Bootstrap Accordion - 如果点击打开的面板,不要折叠

Javascript onchange(this.value,that.value)不适用于ipad