Escaping & for display in mail client (mailto link)

gss5 picture gss5 · Jul 1, 2011 · Viewed 7.1k times · Source

I have a JavaScript function like so:

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

This code is executed on a hyperlink's onclick event, and opens the mail client (mailto://). However, the title of the page has several & symbols, but the title is only picked up until the first &. The url is always picked up.

What is the correct JavasSript to escape the & and display it in the mail client's subject line?

Answer

Daniel Cassidy picture Daniel Cassidy · Jul 1, 2011
var encoded_body = encodeURIComponent(window.location.href);
var encoded_subject = encodeURIComponent(document.title);
var mailto_link = "mailto:?subject=" + encoded_subject + "&body=" + encoded_body;

should do it (encodeURIComponent instead of encodeURI).

In your original code you were also incorrectly double encoding the subject (once on line 2, and then again on line 3).

I took the liberty of renaming your variables to make it clearer that they contain the encoded subject and body, as opposed to the original text.