【问题标题】:Convert String in html format to mailto link将html格式的String转换为mailto链接
【发布时间】:2011-11-08 10:26:27
【问题描述】:

在 Java webapp 中,我需要一个自动转换器来转换字符串以在 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 但她对字符“&”什么也没做!

【问题讨论】:

    标签: java html encoding mailto


    【解决方案1】:

    引用RFC 6068(感谢 JB Nizet):

    当产生 'mailto' URIs 时,所有的空格都应该被编码为 %20 和 '+' 字符可以编码为 %2B。请注意“+” 字符经常用作电子邮件地址的一部分 表示一个子地址,例如&lt;bill+ietf@example.org&gt;

    更新代码:

    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

    【讨论】:

    • 这将转义 HTML 特殊字符,但不会对 mailto“请求字符串”中的每个参数进行编码。每个参数都应该首先被编码,然后整个 URL 应该被 HTML 转义。
    • 问题是 URLEncoder 使用 + 表示空格,而这不适用于 mailto 链接(+ 字面意思是邮件的主题)。但是参数必须以某种方式编码,至少对于多行正文。见tools.ietf.org/html/rfc6068#page-8
    • URLEncoder.encode("S&D", "UTF-8") 可以,但是 URLEncoder.encode("S&D", "UTF-8") 不起作用!我检索 html 字符,我需要转换为 mailtolink。
    • 源页面链接为S%26amp%3BD,邮件客户端软件结果为S&D
    • 对我来说,S&amp;D 被正确编码为S%26D。我在答案中添加了输出和用法。
    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2011-09-30
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多