Я пока не нашел, как закодировать эту строку, чтобы она соответствовала как хранению в HTML, так и кодированию как URL
Это потому, что их нет, так как онидве отдельные вещи.
Печать в HTML обычно должна выполняться путем замены только '
, "
, <
, >
и &
на '
,"
, <
, >
и &
.Вот примеры, делающие это: Рекомендуемый метод для экранирования HTML в Java , наиболее тривиальный и простой из возможных, так как
public static String encodeToHTML(String str) {
return str
.replace("'", "'")
.replace("\"", """)
.replace("<", "<")
.replace(">", ">")
.replace("&", "&");
}
Обратите внимание, что на вашей странице должен быть соответствующий набор символови помните, что если вы, например, печатаете URL-адрес в поле атрибута, требования будут немного другими.
Кодирование в виде URL-адреса позволяет значительно сократить список символов.Из документации URLEncoder :
Буквенно-цифровые символы от "a" до "z", от "A" до "Z" и от "0" до "9" остаются неизменными.
Специальные символы ".", "-", "*" и "_" остаются прежними.
Символ пробела "" преобразуется в знак плюс "+".
Все остальные символы небезопасны и сначала преобразуются в один или несколько байтов с использованием некоторой схемы кодирования.Затем каждый байт представлен 3-символьной строкой «% xy», где xy - это шестнадцатеричное представление байта из двух цифр.
Рекомендуемая схема кодирования - UTF-8.
Вы получите те с
String encoded = new java.net.URLEncoder.encode(url, "UTF-8");
Выше приведено кодирование формы HTML, которое близко к тому, что делает кодирование URL, с некоторыми заметными отличиями, наиболее актуальным из которых является +
против %20
.Для этого вы можете сделать это на выходе:
String encoded = encoded.replace("+", "%20");
Обратите внимание, что вы не хотите использовать кодировку URL для всего http://BUCKET_ENDPOINT/PATH_1/PATH_2/PATH_3/PATH_4/PATH_5/TEST NAME COULD BE WITH & AND OTHER SPECIAL CHARS.zip
, но до последней его части, TEST NAME COULD BE WITH & AND OTHER SPECIAL CHARS.zip
и отдельные сегменты пути, если они не являются фиксированными.
Если вы находитесь в положении, в котором вам нужно сгенерировать URL-адрес и , напечатайте его в формате HTML, сначала закодируйте его как URL-адрес,затем выполните html-экранирование.