Ответ 1
Знак +
имеет смысловое значение в строке запроса. Он используется для представления пробела. Другим символом, имеющим семантическую важность в строке запроса, является &
, который используется для разделения различных пар var=value
в строке запроса.
Большинство сценариев на стороне сервера будут декодировать параметры запроса перед их использованием, так что +
будет правильно преобразован в пробел. Теперь, если вы хотите, чтобы в строке запроса присутствовал буквальный +
, вам нужно вместо этого указать %2B
.
+
знак в строке запроса преобразуется в URL-адрес в пробел. %2B
в строке запроса URL-декодируется на знак +.
См. разницу между
http://www.google.com/search?q=foo+bar
и
http://www.google.com/search?q=foo%2Bbar
В приведенных выше примерах сервер Google script содержит URL-декодирование параметров запроса, а затем их использование для выполнения поиска.
URL-кодирование - это не что иное, как знак %
, за которым следует шестнадцатеричный код специального символа. Например, мы знаем, что шестнадцатеричный код A
равен 0x41 (десятичный: 65). Попробуйте следующее:
http://www.google.com/search?q=%41
Надеюсь, это упростит URL-кодирование.
Итак, если вы хотите, чтобы знак +
сохранялся, когда JavaScript извлекает URL с знаками +
в своих параметрах запроса, а серверная сторона script обрабатывает параметры запроса после URL-декодирования, вы должны URL-кодировать параметры запроса в URL-адресе, прежде чем использовать запрос HTTP-запроса, чтобы все знаки +
были преобразованы в %2B
, когда запрос достигнет серверной стороны script. Теперь, когда серверная сторона script URL-декодирует строку запроса, все %2B
преобразуются обратно в +
знаки, которые вы хотите.
См. Кодировать URL в JavaScript?, чтобы узнать, как URL-кодировать параметры с помощью JavaScript. Короткий ответ из обсуждения там:
var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);