为 mailto link 编码 json 数据

Encoding json data for a mailto link

如何在查询参数中使用 JSON 数据对 mailto link 进行正确编码,以便 link 在某些 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 后电子邮件中的结果 link 如下所示:

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

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

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

您需要使用 encodeURIComponent 两次,因为您是在另一个参数中对一个参数进行编码。

您的 link 正在使用 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>