编码mailto链接的json数据

时间:2018-01-30 17:49:36

标签: javascript html json mailto

如何在查询参数中使用JSON数据正确编码mailto链接,以便在某些JSON数据可能包含空格时链接按预期工作?

这是一个简单的例子:

var data = {
 "Test": "Property with spaces"
};

var mailTo = 'mailto:?body=http://www.google.com/?body=' + JSON.stringify(data);

document.getElementById("link").href = mailTo;

点击链接后,电子邮件中的结果链接如下所示:

link

这是一个JSBin,显示了我在说什么:

https://jsbin.com/vuweyemeji/1/edit?html,js,output

编辑:添加encodeURI()或encodeURIComponent()似乎对我不起作用。我尝试在数据对象周围添加其中任何一种方法,当我点击mailto链接时,url在outlook中看起来仍然相同。

1 个答案:

答案 0 :(得分:2)

您需要使用encodeURIComponent两次,因为您正在将参数编码到另一个参数中。

您的链接正在使用mailto协议并使用body参数来编码内容。但是,在该内容中,您输入的URL包含参数,因此,此参数也应编码。

试试这个:

var data = {"Test": "Property with spaces"};
var mailTo = 'mailto:?body=' + encodeURIComponent('http://www.google.com/?body=' + encodeURIComponent(JSON.stringify(data)));
document.getElementById("link").href = mailTo;
<a id='link'>anchor</a>