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


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


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




-2

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

strText = strText.Replace(" ", "+");

2
А как насчет других зарезервированных персонажей? Это решение исправит только +, а не? и так далее
Джон Мак
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.