HTML-форма с несколькими скрытыми элементами управления с тем же именем

Является ли законным иметь HTML-форму с более чем одним «скрытым» элементом управления с тем же именем? Я ожидаю получить значения всех этих элементов на сервере. Если это законно, делают ли основные браузеры правильное поведение?

    В браузерах все в порядке. Однако, как анализирует библиотека приложений, она может различаться.

    Предполагается, что программы должны группировать идентично названные элементы вместе. Хотя спецификация HTML явно не говорит об этом, она неявно указывается в документации на флажках :

    Несколько флажков в форме могут иметь одно и то же имя управления. Таким образом, например, флажки позволяют пользователям выбирать несколько значений для одного и того же свойства.

    Различные серверные технологии будут отличаться. С помощью PHP вы можете использовать синтаксис стиля массива для имени, чтобы заставить коллекцию создавать на сервере. Если отправлено на сервер, $_POST['colors'] будет массивом с двумя значениями, #003366 и #00FFFF :

       

    Вообще говоря, вы захотите использовать стандартное имя без квадратных скобок. Большинство серверных технологий смогут анализировать полученные данные и предоставлять коллекцию некоторого типа. Node.js обеспечивает полезную функциональность через querystring.parse :

     const querystring = require('querystring') querystring.parse('foo=bar&abc=xyz&abc=123') // { foo: 'bar', abc: ['xyz', '123'] } 

    Если у вас есть что-то вроде этого:

        

    Строка запроса будет выглядеть как x=1&x=2&x=3 … В зависимости от программного обеспечения сервера, которое вы используете для синтаксического анализа строки запроса, это может не сработать.

    Да, и большинство серверов приложений собирают соответствующие элементы и объединяют их запятыми, например, такую ​​форму:

      

    … разрешит URL (в случае GET – POST будет работать одинаково):

    http://myhost.com/myscript.asp?myHidden=1&myHidden=2&myHidden=3

    … и будет выставлен вам в коде следующим образом: (например, следуя примеру Response.Write (Request.QueryString («myHidden»)):

    1, 2, 3

    Поэтому, чтобы захватить значения, вы просто разделили строку и получили бы доступ к ним как к массиву (или тому, что сопоставимо на выбранном вами языке).

    (Должно быть уточнено: в PHP это немного отличается (как указывает Джонатан, нотация в виде скобок предоставляет элементы как массив вашему PHP-коду), но ASP, ASP.NET и CF все отображают значения в виде списка, разделенного запятыми. Итак, да, полное дублирование имен действительно.)

    HTML5

    Ненормативный раздел 4.10.1.3. Конфигурация формы для связи с сервером явно указывает, что она действительна:

    Несколько элементов управления могут иметь одно и то же имя; например, здесь мы даем все флажки с тем же именем, и сервер отличает, какой флажок был проверен, видя, какие значения передаются с этим именем – например, переключатели, им также присваиваются уникальные значения с атрибутом value.

    Нормативная версия этого просто заключается в том, что она не запрещена нигде, и алгоритм представления формы точно определяет, какой запрос должен быть сгенерирован:

    В частности, для php я провел несколько тестов с именами массивов в скрытых вводах, и я разделяю здесь свои результаты:

         Post Hidden 2D Arrays   
    <?php print_r($_POST); ?>

    Я считаю, что это законно, по крайней мере, в случае переключателей и флажков. Когда мне нужно динамически добавлять входные данные в XSLT, я даю им одно и то же имя; в ASP.NET, Request.Form [“whatever_name”] – это строка всех этих значений, разделенных запятыми.

    Я только что попытался использовать одно и то же имя управления, counties [] для нескольких входных данных SELECT, чтобы в каждом из графств Англии, Шотландии, Уэльса и Ирландии были переданы значения для одного и того же параметра. PHP отлично справляется с этим, но HTML-валидатор дает предупреждение. Я не знаю, будут ли все браузеры обрабатывать это одинаково.

    Interesting Posts

    Как развернуть военный файл в Tomcat 7

    Какую прошивку следует использовать на моем маршрутизаторе?

    Windows 7 не загружается после запуска окна Windows / застрял на Classpnp.sys в безопасном режиме

    Parse цитирует строки с boost :: spirit

    Превышено максимальное время выполнения в Google Apps Script

    Изменение интерфейса Windows XP с французского на английский

    Как использовать Font Awesome 4.x CSS-файл с JSF? Браузер не может найти файлы шрифтов

    Apache HttpClient 4.0.3 – как установить cookie с sessionID для запроса POST?

    Где должна храниться аннотация @Service? Интерфейс или реализация?

    Каков окончательный формат для интерполяции строк в VS 2015?

    Существует ли регулярное выражение для определения правильного регулярного выражения?

    Что делает комбинирование методов сжатия в 7z?

    Предварительный просмотр второго экрана в главном

    Заставить Chrome использовать HTTPS вместо HTTP, когда это возможно?

    Redis в 10 раз больше использования памяти, чем данные

    Давайте будем гением компьютера.