java - 将 html 格式的字符串转换为 mailto 链接

标签 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>

它的错误字符“&”,所以我需要将“&”转换为“%26”。

有图书馆可以做到吗?

我尝试了 java.net.URLEncoder,但她只更改了“&”而不是“&”,她用加号“+”替换了空格“” 我尝试了 java.net.URI,但她对字符“&”什么也没做!

最佳答案

引用 RFC 6068 (感谢 JB Nizet):

When producing 'mailto' URIs, all spaces SHOULD be encoded as %20, and '+' characters MAY be encoded as %2B. Please note that '+' characters are frequently used as part of an email address to indicate a subaddress, as for example in <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 .

关于java - 将 html 格式的字符串转换为 mailto 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271290/

相关文章:

html - 浏览器编码 URL 的行为是什么?

java - python 和 Java 或 C 中的循环迭代之间的区别

java - 如何将 int[] 转换为 Integer[]?

java - 计算使用java中的Random()方法生成的数字的平均值

asp.net - Request.Form ["name"] 什么时候为空,什么时候为空字符串?

javascript - MarkerClusterer 不聚类标记

php - UTF-8编码问题

java - 如何获取两个字符串中不匹配字符的数量?

html - 如何使用仅在文本区域达到其最大长度时显示的 "ng-show"切换错误消息?

express - UTF8 字符显示为 windows-1252,ExpressJS 在 Electron 上运行