+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);