Конвертировать строку в формате HTML в ссылку mailto - PullRequest
4 голосов
/ 01 сентября 2011

В веб-приложении Java мне нужен автоматический конвертер для преобразования 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, но она ничего не сделала для персонажа "&"!

1 Ответ

10 голосов
/ 01 сентября 2011

Цитирование RFC 6068 (спасибо JB Nizet):

При создании URI «mailto» все пробелы ДОЛЖНЫ быть закодированы как% 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.

...