Будь-який символ, який ви можете включити в 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, в обох «не вказано» як робочих, і multipart/form-data
замість цього слід використовувати POSTed .
На жаль, у реальному світі жоден браузер не визначає кодування полів, навіть якщо це теоретично могло, у заголовках підрозділів multipart/form-data
тіла запиту POST. (Я вважаю, що Mozilla намагалася реалізувати це один раз, але відступила, оскільки зламала сервери.)
І жоден браузер не реалізує напрочуд складний і потворний стандарт RFC2231, який був би необхідний для вставки закодованих імен полів, що не належать до ASCII, у заголовки підрозділів багаточастинної частини. У будь-якому випадку, специфікація HTML, яка визначає multipart/form-data
, прямо не говорить про те, що слід використовувати RFC2231, і, знову ж таки, це призведе до поломки серверів, якщо ви спробуєте.
Тож реальність ситуації полягає в тому, що неможливо дізнатися, яке кодування використовується для імен та значень у поданні форми, незалежно від того, якого типу це форма. Те, що браузери будуть робити з іменами полів та значеннями, що містять символи, що не є ASCII, однаково для GET та обох типів форми POST: він кодує їх, використовуючи кодування сторінки, що містить використовувану форму. Імена форм, що не належать до ASCII, є не більшими, ніж усі інші.
DLH:
Тож ім’я має інший тип даних, ніж для інших елементів?
Насправді єдиним елементом, name
атрибут якого не CDATA
є, є <meta>
. Перегляньте список атрибутів специфікації HTML4 для різних видів використання name
; це перевантажена назва атрибута, що має багато різних значень для різних елементів. Зазвичай це вважається поганим.
Однак зазвичай в ці дні ви уникаєте, name
крім випадків у полях форми (де це ім'я елемента керування) та param
(де це ідентифікатор параметра, що відповідає плагіну). Це лише два значення, з якими можна боротися. Слід уникати використання старої школи name
для ідентифікації елементів, таких як <form>
або <a>
на сторінці ( id
замість цього використовуйте ).
name
чи відрізняється тип даних<input>
для інших елементів, ніж для інших елементів? Цікаво.