Cualquier carácter que pueda incluir en un archivo HTML [X] está bien para ponerlo en un <input name>
. Como dice el comentario de Allain,<input name>
se define como que contieneCDATA
, por lo que lo único que no puede poner allí son los códigos de control y los puntos de código no válidos que el estándar subyacente (SGML o XML) no permite.
Allain citó W3 de la especificación HTML4:
Nota. El método "get" restringe los valores del conjunto de datos del formulario a caracteres ASCII. Solo el método "post" (con enctype = "multipart / form-data") se especifica para cubrir todo el conjunto de caracteres ISO10646.
Sin embargo, esto no es realmente cierto en la práctica.
La teoría es que los application/x-www-form-urlencoded
datos no tienen un mecanismo para especificar una codificación para los nombres o valores del formulario, por lo que el uso de caracteres que no sean ASCII en cualquiera de los dos "no se especifica" como funciona y debe usar POSTedmultipart/form-data
en lugar.
Desafortunadamente, en el mundo real, ningún navegador especifica una codificación para los campos, incluso cuando teóricamente podría hacerlo, en los encabezados de subparte de un multipart/form-data
cuerpo solicitud POST. (Creo que Mozilla intentó implementarlo una vez, pero se echó atrás porque rompió los servidores).
Y ningún navegador implementa lo asombrosamente complejo y feo estándar RFC2231 que sería necesario para insertar nombres de campo codificados que no sean ASCII en los encabezados de las subpartes de varias partes. En cualquier caso, la especificación HTML que define multipart/form-data
no dice directamente que se deba usar RFC2231 y, nuevamente, rompería los servidores si lo intentara.
Entonces, la realidad de la situación es que no hay forma de saber qué codificación se está utilizando para los nombres y valores en el envío de un formulario, sin importar qué tipo de formulario sea. Lo que harán los navegadores con los nombres de campo y valores que contienen caracteres no ASCII es lo mismo para GET y ambos tipos de formulario POST: los codifica usando la codificación de la página que contiene el formulario utilizado. Los nombres de formularios GET que no son ASCII no están más rotos que todo lo demás.
DLH:
Entonces, ¿el nombre tiene un tipo de datos diferente al de otros elementos?
En realidad, el único elemento cuyo name
atributo no CDATA
es <meta>
. Consulte la lista de atributos de la especificación HTML4 para conocer los diferentes usos de name
; es un nombre de atributo sobrecargado, que tiene muchos significados diferentes en los diferentes elementos. Esto generalmente se considera algo malo.
Sin embargo, normalmente en estos días evitaría, name
excepto en los campos de formulario (donde es un nombre de control) y param
(donde es un identificador de parámetro específico del complemento). Eso es solo dos significados con los que lidiar. Se debe evitar el uso de la vieja escuela de name
para identificar elementos como <form>
o <a>
en la página (usar id
en su lugar).
name
tiene un tipo de datos diferente<input>
al que tiene para otros elementos? Interesante.