2011-11-07 22 views
2

我有一個C#ASP.NET應用程序,它爲某些用戶配置文件信息創建值的JavaScript數組。客戶端,我使用jQuery/JavaScript來讀取數組並生成一個mailto鏈接。某些字段可能包含特殊字符,例如' & =/\ "向mailto正文傳遞特殊字符JavaScript

這裏的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的價值:

​​3210

然後我生成使用這段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快樂?

+0

可能的複製TOR [#987199郵寄地址,特殊字符] [1] [1]:http://stackoverflow.com/questions/987199/mailto-special-characters – 2011-11-07 08:29:07

回答

9

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('[email protected]', 'Foo&foo', 'Bar\nBar'); 
/* strTest should be "mailto:abc%40xyz.com?subject=Foo%26foo&body=Bar%0ABar" */ 
window.open(strTest); 

希望得到這個幫助。

+0

我需要的!謝謝,ExpExc :) – Alex