кодировка URL, кодировка формы и mailto: кодировка

Я немного смущен всеми проблемами кодирования, связанными с HTML. Я не имею в виду кодировку в заголовках или кодировку в прологе XML. Это я понимаю. Позвольте мне объяснить.

Когда «mailto:» используется вместе с привязкой или кнопкой отправки в форме, пробел кодируется как «%20», а «перевод строки/возврат каретки/новая строка/конец строки» кодируется как %0A. Когда атрибут enctype используется в форме со значением «application/x-www-form-urlencoded», пробел кодируется как «+», а специальные символы, апострофы, проценты и другие символы преобразуются в их ASCII HEX. эквиваленты. Является ли значение «application/x-www-form-urlencoded» кодировкой URL? Так почему же "%20" для первого и "+" для второго.

"mailto:[email protected][email protected]&[email protected]&subject=This%20is%20the%20subject&body=This%20is%20the%body%0AThis%20is%20the%20second%20paragraph"

В приведенном выше примере пустое пространство в теме сообщения кодируется как %20, а новая строка в теле сообщения — как %0A.

<form enctype="application/x-www-form-urlencoded"></form>

А в приведенном выше пробеле будет закодировано «+». Я что-то упускаю?

Заранее спасибо.


person Jawad    schedule 05.05.2011    source источник


Ответы (1)


URI (например, ваш пример mailto) должны быть закодированы в соответствии с RFC 3986, в котором указано, что пробелы должны быть закодированы как %20.

С другой стороны, формат данных FORM кодируется как application/x-www-form-urlencoded в соответствии с правилами, определенными спецификацией HTML. (См., например, раздел 17.13.3.3 документа HTML. 4.01 спецификация.) Указывает, что пробелы должны быть переведены как знаки +.

Таким образом, хотя процентное кодирование для URI и данных формы одинаково, символ пробела обрабатывается по-разному.

person Edward Thomson    schedule 05.05.2011
comment
В вашей ссылке первый шаг говорит, что пробелы заменены на +. Как последующие этапы кодирования различают пробелы и знаки «плюс»? Или пробелы потеряны? - person Andreas; 25.01.2020