2011-09-01 55 views
4

在Java web应用程序,我需要一个自动转换器转换成字符串在一个mailto链接使用字符串转换至mailto链接

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

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

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

有一个库可以做到这一点?

我试图java.net.URLEncoder中,但她只更改了“&”而不是“&”,她代替空格“”由加号“+” 我试图java.net.URI中的,但她什么也没做字符“ “&”!

回答

9

引用RFC 6068(感谢JB Nizet):

当生产 '的mailto' 的URI,所有空间应该被编码为 %20,和 '+' 字符可能被编码为%2B。请注意,'+' 字符经常用作电子邮件地址的一部分, 表示子地址,例如<[email protected]>

更新代码:

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 = "[email protected]".replace("+", "%2B"); 
String link = String.format("mailto:%s?subject=%s&body=%s", email, subject, body); 
System.out.println(StringEscapeUtils.escapeHtml(link)); 

输出:

mailto:[email protected]?subject=my%20subject&amp;body=S%26D 

其可以以链路可以使用像这样:

<a href="mailto:[email protected]?subject=my%20subject&amp;body=S%26D">mail me</a> 

StringEscapeUtils.escapeHtml(String str)Apache Commons Lang

+0

这将转义HTML特殊字符,但不会编码mailto“请求字符串”中的每个参数。每个参数应首先编码,然后整个URL应该被HTML转义。 –

+0

@JBNizet这是正确的。我想我的发帖太仓促了。 –

+2

问题是URLEncoder使用+作为空格,并且这对于mailto链接不起作用(+实际上在邮件的主题中)。但参数必须以某种方式进行编码,至少对于多线机构来说。请参阅http://tools.ietf.org/html/rfc6068#page-8 –