+знак має семантичне значення у рядку запиту. Він використовується для представлення простору. Інший символ, який має семантичне значення у рядку запиту, - це той, &який використовується для розділення різних 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);