2011-09-01 83 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 –