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