Как кодировать символ плюс ( + ) в URL

ссылка URL ниже откроет новое окно Google mail. Проблема в том, что Google заменяет все плюсы (+) в теле электронной почты пустым пространством. Похоже, это происходит только со знаком+. Есть предложения, как это исправить? ( Я работаю ASP.NET веб-страница)

https://mail.google.com/mail?view=cm&tf=0&to=someemail@somedomain.com&su=some тема и тело=Привет там + Привет там

(в теле электронной почты, " Привет там + Привет там "появится как" Привет там Привет там")

3 ответов


на + символ имеет особое значение в url => это означает пробелы. Если вы хотите использовать + знак вам нужно URL кодировать его:

body=Hi+there%2bHello+there

вот пример того, как вы могли бы правильно создавать URL-адреса в .NET:

var uriBuilder = new UriBuilder("https://mail.google.com/mail");

var values = HttpUtility.ParseQueryString(string.Empty);
values["view"] = "cm";
values["tf"] = "0";
values["to"] = "someemail@somedomain.com";
values["su"] = "some subject";
values["body"] = "Hi there+Hello there";

uriBuilder.Query = values.ToString();

Console.WriteLine(uriBuilder.ToString());

результат

https://mail.google.com:443/mail?view=cm&tf=0&to=someemail%40somedomain.com&su=some+subject&body=Hi+there%2bHello+there


вы хотите символ плюс ( + ) в теле, вы должны закодировать его как 2B.

например: попробуй такое


безопаснее всегда процентно-кодировать все символы, кроме тех, которые определены как" не обслуживаемые " в RFC-3986.

unreserved = Альфа / цифра /" -"/"."/ "_" / "~"

Итак, процент-кодирование знак плюс и другие специальные символы.

проблема, которая у вас есть с плюсами, заключается в том, что, согласно RFC-1866 (спецификация HTML 2.0), пункт 8.2.1. подпункт 1., "Имена полей формы и значения экранируются: символы пробела заменяются ПО"+", а затем зарезервированные символы экранируются"). Этот способ кодирования данных формы также приведен в более поздних спецификациях HTML, ищите соответствующие абзацы о application / x-www-form-urlencoded.