Любой символ, который вы можете включить в файл [X] HTML, можно поместить в файл <input name>
. Как говорится в комментарии Аллена, <input name>
он определяется как содержащий CDATA
, поэтому единственное, что вы не можете вставить туда, - это управляющие коды и недопустимые кодовые точки, которые запрещены базовым стандартом (SGML или XML).
Аллен процитировал W3 из спецификации HTML4:
Запись. Метод "get" ограничивает значения набора данных формы до символов ASCII. Только метод "post" (с enctype = "multipart / form-data") указан для охвата всего набора символов ISO10646.
Однако на практике это не совсем так.
Теоретически application/x-www-form-urlencoded
данные не имеют механизма для указания кодировки для имен или значений формы, поэтому использование не-ASCII символов в любом из них «не указано» как работающее, и multipart/form-data
вместо этого вы должны использовать POSTed .
К сожалению, в реальном мире ни один браузер не определяет кодировку для полей, даже если теоретически это возможно, в заголовках подчастей multipart/form-data
тела запроса POST. (Я считаю, что Mozilla однажды пыталась реализовать это, но отказалась, поскольку сломала серверы.)
И ни один браузер не реализует удивительно сложный и уродливый стандарт RFC2231, который был бы необходим для вставки закодированных имен полей, отличных от ASCII, в заголовки подразделов multipart. В любом случае, в спецификации HTML multipart/form-data
прямо не говорится, что следует использовать RFC2231, и, опять же, это сломает серверы, если вы попытаетесь.
Таким образом, на самом деле ситуация такова, что невозможно узнать, какая кодировка используется для имен и значений при отправке формы, независимо от того, какой это тип формы. То, что браузеры будут делать с именами полей и значениями, содержащими символы, отличные от ASCII, одинаково для GET и обоих типов формы POST: он кодирует их, используя кодировку страницы, содержащей используемую форму. Имена форм GET, отличные от ASCII, сломаны не больше, чем все остальное.
DLH:
Значит, имя имеет другой тип данных, чем другие элементы?
Фактически единственный элемент, у которого нет name
атрибута, CDATA
есть <meta>
. См. Список атрибутов спецификации HTML4 для всех различных вариантов использования name
; это имя перегруженного атрибута, имеющее много разных значений для разных элементов. Обычно это считается плохим.
Однако, как правило, в наши дни вы избегаете, name
за исключением полей формы (где это имя элемента управления) и param
(где это идентификатор параметра, специфичный для плагина). Это только два значения, с которыми нужно бороться. Следует избегать использования старой школы name
для идентификации таких элементов, как <form>
или <a>
на странице (используйте id
вместо этого).
name
есть ли другой тип данных,<input>
чем для других элементов? Интересно.