Зачем для application/x-www-form-urlencoded заменять “%20” на “+”?

253
26 сентября 2017, 08:45

Для application/x-www-form-urlencoded пробелы должны быть заменены на "+", поэтому вам может понадобиться encodeURIComponent с дополнительной заменой "%20" на "+".

Источник: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

Answer 1

Идем на wiki. Для типа данных application/x-www-form-urlencoded указана ссылка на документ HTML 4.01 Specification, Section 17.13.4.1 в котором написано следующее:

application/x-www-form-urlencoded

This is the default content type. Forms submitted with this content type must be encoded as follows:

  1. Control names and values are escaped. Space characters are replaced by '+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by '%HH', a percent sign and two hexadecimal digits representing the ASCII code of the character. Line breaks are represented as "CR LF" pairs (i.e., '%0D%0A').
  2. The control names/values are listed in the order they appear in the document. The name is separated from the value by '=' and name/value pairs are separated from each other by `&'.
Answer 2

Для MIME application/x-www-form-urlencoded используется такая же схема кодирования, как и для URL (ибо «...-urlencoded», то есть «закодировано как в URL»).

В свою очередь, в URL кодирование пробела плюсом является договорённостью. Причина этой договорённости банальна — читаемость. Дело в том, что web создавался в англоязычных США, и об использовании нелатинских адресов тогда даже не задумывались (или задумывались, но решили, что таких будет крайне немного), а потому каждая буква кодировалась как есть, без escape-последовательностей.

Сравните какой-нибудь:

www.example.org/fileName.asp?param1=some+Param+with+Long+length&bar=5000

и:

www.example.org/fileName.asp?param1=some%20Param%20with%20Long%20length&bar=5000

Думаю, не только мне прочитать первый вариант проще и быстрее, особенно в случае слов, начинающихся с больших букв.

P. S: В случае использования нелатинских символов, когда вся строка состоит из одних escape-последовательностей, разницы в способах записи пробела никакой, да.

READ ALSO
Длина элемента с классом hidden

Длина элемента с классом hidden

Столкнулся с непониманием того, какая высота у элементов с dislpay: none;

250
JavaScript, проблема с SetInterval

JavaScript, проблема с SetInterval

Подскажите, почему без if-а таймер работает нормально, а с ним - вообще не запускается?

300
Клик на мобильном устройстве

Клик на мобильном устройстве

Данный код обрабатывает клик на компьютере, но не обрабатывает клик на телефонеКак его адаптировать, чтобы клик отслеживался на телефоне?

330