Ciąg zapytania logowania plus


86

Mam aplikację internetową utworzoną przy użyciu C # i asp.net. Umieściłem wartość parametru w kwerendzie ze znakiem plus (+). Ale znak plusa znika.

Jak mogę dołączyć znak plus (+) do ciągu zapytania bez znikania?

Proszę doradź.

Dzięki.

Edycja: dodany kod z UrlEncode

string str = Server.UrlEncode(Requery.QueryString["new"]);

w rzeczywistości wartość zależy od danych wejściowych użytkownika.
domlao

Do Twojej wiadomości, uważaj UrlBuilder, wydaje się to trochę bezużyteczne, dlatego natknąłem się na twoje pytanie. Zobacz stackoverflow.com/questions/24576239/…
KCD

* UriBuildernie Url
KCD

Odpowiedzi:


146

+znak ma znaczenie semantyczne w ciągu zapytania. Służy do reprezentowania przestrzeni. Innym znakiem, który ma znaczenie semantyczne w ciągu zapytania, &jest używany do oddzielania różnych var=valuepar w ciągu zapytania.

Większość skryptów po stronie serwera dekoduje parametry zapytania przed ich użyciem, dzięki czemu a +zostanie poprawnie przekonwertowany na spację. Teraz, jeśli chcesz, aby literał +był obecny w ciągu zapytania, musisz %2Bzamiast tego określić .

+znak zapytania jest dekodowany z adresu URL do spacji. %2Bw ciągu zapytania jest dekodowany z adresu URL do znaku +.

Zobacz różnicę między

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

i

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

W powyższych przykładach skrypt serwera Google dekoduje adresy URL parametrów zapytania, a następnie wykorzystuje je do wyszukiwania.

Kodowanie adresu URL to nic innego jak %znak, po którym następuje kod szesnastkowy znaku specjalnego. Na przykład wiemy, że kod szesnastkowy Ato 0x41 (dziesiętnie: 65). Spróbuj tego:

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

Mam nadzieję, że dzięki temu kodowanie adresów URL będzie jasne.

Tak więc, jeśli chcesz, aby +znak został zachowany, gdy JavaScript pobiera adres URL ze +znakami w parametrach zapytania, a skrypt po stronie serwera przetworzyłby parametry zapytania po zdekodowaniu adresu URL, powinieneś zakodować parametry zapytania w adresie URL przed użyciem wysłania żądania HTTP get, aby wszystkie +znaki były konwertowane na znaki, %2Bgdy żądanie dotrze do skryptu po stronie serwera. Teraz, gdy skrypt po stronie serwera dekoduje ciąg zapytania, wszystko %2Bjest konwertowane z powrotem na +znaki, co jest tym, czego chcesz.

Zobacz Zakodować adres URL w JavaScript? aby dowiedzieć się, jak zakodować parametry w adresach URL za pomocą JavaScript. Krótka odpowiedź z tamtejszej dyskusji:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);

1
Jak mogę zamienić znak + na% 2B w javascript. Ponieważ tworzę mój querystring w javascript.
domlao

5

Należy URLEnkodować wartości ciągu zapytania, aby upewnić się, że żadne znaki specjalne nie zostaną utracone.


1
W ten sposób string str = Server.UrlEncode (Requery.QueryString ["nowy"]); ? Dzięki
domlao

Niezupełnie, musisz je zakodować przed umieszczeniem ich w ciągu zapytania, a nie przed wycofaniem. Jak ustawiasz wartości w ciągu zapytania?
DoctorMick,

w JavaScript, na przykład $ ("# btn"). click (function () {var param = "c ++"; ...});
domlao


1

Zmieniam swoje poprzednie stwierdzenie, aby nikt się nie mylił!

Utwórz swój adres URL za pomocą Server.UrlEncode. na przykład

string myUrl = "http://myurl?param1="  + Server.UrlEncode("my+param+1");

3
Jeśli jest to adres URL, powinieneś kodować URL, a nie kodować HTML. Oni różni.
Damien_The_Unbeliever

Dodałem swój querystring w javascript, czy jest jakikolwiek sposób zakodowania go w javascript?
domlao

0

Innym prostym sposobem jest Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1)założenie, że mój adres URL tohttp://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==


0

przed wysłaniem parametru należy sprawdzić czy parametr zawiera znak plus, jeśli trzeba zamienić na jedną flagę np .: parametr to: klasjdlkasd + djid3223 czy można zamienić: klasjdlkasdFLAGdjid3223

a kiedy się nawrócisz, musisz zastąpić angaina

klasjdlkasd + djid3223


-1

Spróbuj tego, to działa dla mnie:

Request.QueryString["new"].Trim();


-2

Dodaj tę linię w Decrypt Funcation:

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

2
A co z innymi zastrzeżonymi postaciami? To rozwiązanie naprawi tylko znak +, a nie? i itp.
John Mc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.