Плюс підпишіть рядок запиту


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 - це не що інше, як %знак, за яким слідує шістнадцятковий код спеціального символу. Наприклад, ми знаємо, що шістнадцятковий код Aдорівнює 0x41 (десятковий: 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

Вам слід URLEкодувати значення рядка запиту, щоб переконатися, що будь-які спеціальні символи не втрачені.


1
Ось так, рядок str = Server.UrlEncode (Requery.QueryString ["new"]); ? ЗАВДЯКИ
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 Encode, а не Html Encode. Вони є різними.
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

і коли ви йдете конвертувати, вам потрібно знову замінити

klasjdlkasd + djid3223




-2

Додайте цей рядок у функцію Decrypt Funcation:

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

2
А як щодо інших зарезервованих персонажів? Це рішення буде виправляти лише +, а не? та & etc
Джон Мак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.