将html格式的String转换为mailto链接

时间:2011-09-01 13:49:07

标签: java html encoding mailto

在Java webapp中,我需要一个自动转换器来转换String以在mailto链接中使用

例如,我有这个字符串“S& D”将在html中正确显示“S& D”。但现在我需要在我的网页上有一个mailto链接。

<a href="mailto:?subject=my%20subject&body=S&amp;D">share</a>

错误的字符“&amp;”,所以我需要转换“&amp;”到“%26”。

有一个图书馆可以做到吗?

我试过java.net.URLEncoder,但她只改变了“&amp;”不是“&amp;”她用“+”代替空格“” 我试过java.net.URI,但她没有为角色“&amp;”做任何事情!

1 个答案:

答案 0 :(得分:10)

引用RFC 6068(感谢JB Nizet):

  

在生成'mailto'URI时,所有空格应该被编码为   %20和'+'字符可以编码为%2B。请注意'+'   字符经常用作电子邮件地址的一部分   表示子地址,例如<bill+ietf@example.org>

更新的代码:

String subject = URLEncoder.encode("my subject", "utf-8").replace("+", "%20");
String body = URLEncoder.encode("S&D", "utf-8").replace("+", "%20");
// Email addresses may contain + chars
String email = "test@example.com".replace("+", "%2B");
String link = String.format("mailto:%s?subject=%s&body=%s", email, subject, body);
System.out.println(StringEscapeUtils.escapeHtml(link));

输出:

mailto:test@example.com?subject=my%20subject&amp;body=S%26D

可以在类似的链接中使用:

<a href="mailto:test@example.com?subject=my%20subject&amp;body=S%26D">mail me</a>
来自StringEscapeUtils.escapeHtml(String str)

Apache Commons Lang