Знак плюса в строке запроса

86

У меня есть веб-приложение, созданное с использованием C # и asp.net. Я поместил значение параметра в строку запроса со знаком плюс (+). Но знак плюс исчезнет.

Как включить знак плюса (+) в строку запроса, чтобы он не исчезал?

Пожалуйста, порекомендуйте.

Благодарю.

Изменить: добавлен код с UrlEncode

string str = Server.UrlEncode(Requery.QueryString["new"]);
домлао
источник
на самом деле значение зависит от ввода пользователя.
domlao
FYI остерегайтесь UrlBuilder, это кажется немного бесполезным, поэтому я наткнулся на ваш вопрос. См. Stackoverflow.com/questions/24576239/…
KCD
* UriBuilderне URL
KCD

Ответы:

146

+Знак имеет семантическое значение в строке запроса. Он используется для обозначения пространства. Еще один символ, имеющий семантическую важность в строке запроса, - &это символ, который используется для разделения различных var=valueпар в строке запроса.

Большинство скриптов на стороне сервера декодируют параметры запроса перед их использованием, чтобы +правильно преобразовать a в пробел. Теперь, если вы хотите, +чтобы в строке запроса присутствовал литерал , вам нужно указать %2Bвместо него.

+знак в строке запроса декодируется URL-адресом до пробела. %2Bв строке запроса URL-адрес декодируется до знака +.

Увидеть разницу между

http://www.google.com/search?q=foo+bar

и

http://www.google.com/search?q=foo%2Bbar

В приведенных выше примерах серверный сценарий Google декодирует URL-адреса параметров запроса и затем использует их для поиска.

Кодировка URL - это не что иное, как %знак, за которым следует шестнадцатеричный код специального символа. Например, мы знаем, что шестнадцатеричный код A0x41 (десятичный: 65). Попробуй это:

http://www.google.com/search?q=%41

Надеюсь, это проясняет кодировку URL.

Итак, если вы хотите, чтобы +знак сохранялся, когда JavaScript извлекает URL-адрес со +знаками в его параметрах запроса, а сценарий на стороне сервера будет обрабатывать параметры запроса после его декодирования URL-адреса, вам следует URL-кодировать параметры запроса в URL-адресе. перед использованием выдачи HTTP-запроса на получение, чтобы все +знаки были преобразованы в %2B's, когда запрос достигает сценария на стороне сервера. Теперь, когда серверный скрипт URL-декодирует строку запроса, все %2Bпреобразуется обратно в +знаки, которые вам нужны.

Смотрите Кодировать URL-адрес в JavaScript? чтобы узнать, как URL-кодировать параметры с помощью JavaScript. Краткий ответ из обсуждения там:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);
Сусам Пал
источник
1
Как заменить знак + на% 2B в javascript. Потому что я создаю свою строку запроса в javascript.
domlao
5

Вы должны URLEncode значения вашей строки запроса, чтобы убедиться, что какие-либо специальные символы не потеряны.

ДокторМик
источник
1
Таким образом, строка str = Server.UrlEncode (Requery.QueryString ["новый"]); ? Спасибо
domlao
Не совсем так, вам нужно кодировать их перед тем, как вставлять в строку запроса, а не когда вы их забираете обратно. Как вы устанавливаете значения в строке запроса?
DoctorMick
в Javascript, например $ ("# btn"). click (function () {var param = "c ++"; ...});
domlao
4

Посмотрите справочник по кодировке URL-адресов HTML

Вам нужно закодировать знак + - его значение должно быть% 2B

Мортен Андерсон
источник
+Знак разрешен в значении параметра запроса, где он не должен кодироваться, потому что он уже кодирует «пробел»
ZZ 5
1

Я изменяю свое предыдущее утверждение, чтобы никого не запутать!

Создайте свой URL-адрес с помощью Server.UrlEncode. например

string myUrl = "http://myurl?param1="  + Server.UrlEncode("my+param+1");
гред
источник
3
Если это для URL-адреса, вы должны кодировать URL-адрес, а не Html-кодировать. Они являются различными.
Damien_The_Unbeliever
Я добавил свою строку запроса в javascript, есть ли способ закодировать ее в javascript?
domlao
0

Другой простой способ - Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1)предположить, что мой URL-адресhttp://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==

Акула
источник
0

перед отправкой вам параметра вам необходимо проверить, содержит ли параметр знак плюс, если вам нужно заменить один флаг, например: параметр: klasjdlkasd + djid3223, вы можете заменить: klasjdlkasdFLAGdjid3223

и когда вы собираетесь конвертировать, вам нужно заменить angain

klasjdlkasd + djid3223

Майкл Родригес
источник
-1

Попробуйте это, у меня это работает:

Request.QueryString["new"].Trim();
кобальт
источник
-2

Решение состоит в том, чтобы ВСЕГДА включать .Replace ("", "+"), когда вы запрашиваете строку запроса

строка s = Request.QueryString ["id"]. Trim (). Replace ("", "+");

источник: http://www.webmasterworld.com/forum47/3238.htm

Дилхан Джаятилаке
источник
-2

Добавьте эту строку в Decrypt Funcation:

strText = strText.Replace(" ", "+");
Виджай Мунгара
источник
2
А как насчет других зарезервированных персонажей? Это решение исправит только +, а не? и так далее
Джон Мак