我有一个 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/