+Знак имеет семантическое значение в строке запроса. Он используется для обозначения пространства. Еще один символ, имеющий семантическую важность в строке запроса, - &это символ, который используется для разделения различных 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);