5 ответов:
обратите внимание, что не все персонажи представлены для
nameатрибуты полей формы (даже при использовании POST)!символы Белого пробела обрезаются и внутренние символы белого пробела, а также символ
.заменены_. (Протестировано в Chrome 23, Firefox 13 и Internet Explorer 9, все Win7.)
любой символ, который вы можете включить в HTML-файл [X], можно поместить в
<input name>. Как говорится в комментарии Аллена,<input name>определен как содержащийCDATA, поэтому единственные вещи, которые вы не можете вставить, - это управляющие коды и недопустимые кодовые точки, которые запрещает базовый стандарт (SGML или XML).Allain процитировал W3 из спецификации HTML4:
Примечание. Метод " get " ограничивает значения набора данных формы символами ASCII. Только метод "post" (с enctype= "multipart / form-data") указывается для покрытия всего набора символов ISO10646.
однако на практике это не совсем так.
теория заключается в том, что
application/x-www-form-urlencodeddata не имеет механизма для указания кодировки для имен или значений формы, поэтому использование символов, отличных от ASCII, либо" не указано " как рабочее, и вы должны использовать POSTed .к сожалению, в реальном мире, ни один браузер определяет кодировку поля, даже когда это теоретически возможно, в заголовках подразделов a
multipart/form-dataтело запроса POST. (Я считаю, что Mozilla пыталась реализовать его один раз, но отступила, поскольку она сломала серверы.)и ни один браузер не реализует удивительно сложный и уродливый RFC2231 стандарт, который был бы необходим для вставки закодированных имен полей, отличных от ASCII, в заголовки вложенных частей multipart. В любом случае, спецификация HTML, которая определяет
multipart/form-dataпрямо не говорит, что RFC2231 следует использовать, и, опять же, это сломает серверы, если вы попытаетесь.таким образом, реальность ситуации заключается в том, что нет способа узнать, какая кодировка используется для имен и значений в представлении формы, независимо от того, какая это форма. То, что браузеры будут делать с именами полей и значениями, содержащими символы, отличные от ASCII, одинаково для GET и обоих типов формы POST: он кодирует их с помощью кодировки страницы, содержащей используемую форму. Не-ASCII получить имена форм не более сломаны, чем все остальное.
DLH:
Итак, имя имеет другой тип данных, чем для других элементов?
собственно единственный элемент которого не
CDATAи<meta>. Смотрите спецификации HTML4 список атрибутов для всех различных видов использованияname; это перегруженное имя атрибута, имеющее много разных значений на разных элементах. Это вообще считается плохим вещь.однако, как правило, в эти дни вы бы избежать
nameкроме полей формы (где это имя элемента управления) иparam(где это идентификатор конкретного параметра плагина). Это только два значения, с которыми нужно бороться. Использование старой школыnameдля идентификации таких элементов, как<form>или<a>на странице следует избегать (используйтеidвместо).
в то время как комментарий Аллена ответил на прямой вопрос OP, а бобинс предоставил блестящую подробную информацию, я считаю, что многие люди приходят сюда, чтобы найти ответ на более конкретный вопрос: "Могу ли я использовать символ точки в атрибуте имени ввода формы?"
поскольку этот поток появился в качестве первого результата, когда я искал это знание, я догадался, что могу также поделиться тем, что я нашел.
во-первых, Матиас утверждал, что:
символ . заменяются на _
Это неправда. Я не знаю, действительно ли браузер сделал такую операцию еще в 2013 году, хотя я сомневаюсь в этом. Браузеры отправляют точечные символы, как они есть (говоря о почтовых данных)! Вы можете проверить это в инструментах разработчика любого приличного браузера.
пожалуйста, обратите внимание, что крошечный маленький комментарий от abluejelly, который, вероятно, пропущен многими:
Я хотел бы отметить, что это серверная вещь, а не браузерная вещь. Проверена на Win7 FF3 / 3.5 / 31, IE5/7/8/9/10/Edge, Chrome39 и Safari Windows 5, и все они отправили " проверить это.stuff " (четыре ведущих пробела) в качестве имени в сообщении ASP.NET dev сервер в комплекте с VS2012.
Я проверил его с Apache HTTP server (v2.4.25) и действительно имя ввода, как "foo.бар " изменяется на "foo_bar". Но в таком названии, как " фу[фу.бар]" эта точка не заменяется _!
мои выводы: вы можете использовать точки, но я бы не стал использовать, так как это может привести к некоторым неожиданное поведение в зависимости от используемого HTTP-сервера.
вы имеете в виду атрибуты id и name тега ввода HTML?
Если это так, я бы очень хотел ограничить (или преобразовать) разрешенные символы имени "ввода" только в a-z (A-Z), 0-9 и ограниченный диапазон знаков препинания (".", ",", прием.), если только ограничить потенциал эксплойтов XSS и т. д.
кроме того, почему пользователь может управлять любым аспектом входного тега? (Не может ли в конечном итоге быть проще с точки зрения проверки сохранить имена входных тегов "custom_1", 'custom_2' и т. д. а затем сопоставьте их по мере необходимости.)
Comments