Как кодировать символ плюса (+) в URL-адресе
В приведенной ниже ссылке URL откроется новое окно электронной почты Google. Проблема заключается в том, что Google заменяет все плюсы (+) в элементе электронной почты пустым пространством. Похоже, это происходит только с знаком+. Любые предложения о том, как исправить это? (Я работаю на веб-странице ASP.NET)
https://mail.google.com/mail?view=cm&tf=0&[email protected]&su=some subject & body = Привет там + Привет там
(В электронной почте тела "Привет там + Hello there" появится как "Привет там Hello there" )
Ответы
Ответ 1
Символ +
имеет особое значение в 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"] = "[email protected]";
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
Ответ 2
Вам нужен символ плюса (+) в теле, который вы должны закодировать как 2B.
Например:
Попробуйте это
Ответ 3
Безопаснее всегда кодировать проценты всех символов, кроме тех, которые определены как "безоговорочно" в RFC-3986.
unreserved = ALPHA/DIGIT/ "-" / "." / "_" / "~"
Итак, проценты кодируют символ плюса и другие специальные символы.
Проблема, которую вы испытываете с плюсами, связана с тем, что в соответствии с RFC-1866 (спецификация HTML 2.0), пункт 8.2.1. подпункт 1. "Имена и значения полей формы сбрасываются: символы пробела заменяются на" + ", а затем зарезервированные символы экранируются" ). Этот способ кодирования данных формы также приведен в более поздних спецификациях HTML, ищите соответствующие абзацы о приложении/x-www-form-urlencoded.
Ответ 4
для языка JavaScript используйте функцию encodeURIComponent для кодирования специальных символов