¿Qué personajes están permitidos en el atributo HTML Nombre de entrada dentro de la etiqueta?

StackOverflow https://stackoverflow.com/questions/3424860

Pregunta

Tengo un script PHP que generará <input>s dinámicamente, así que me preguntaba si necesitaba para filtrar los caracteres en el atributo name.

Yo sé que el nombre tiene que comenzar con una letra, pero No sé cualquier otra regla. Calculo corchetes se debe permitir, a partir de PHP las utiliza para crear matrices de datos del formulario. ¿Qué hay de paréntesis? Espacios?

¿Fue útil?

Solución

La única restricción real sobre qué caracteres pueden aparecer en los nombres de control de formulario cuando se envía un formulario con GET

"El 'se' restringe método forman los valores del conjunto de datos de caracteres ASCII." referencia

Hay un buen hilo en él aquí .

Otros consejos

Tenga en cuenta, que no todos los caracteres se envían para su name atributos de campos de formulario (incluso cuando se utiliza POST)!

caracteres de espacio en blanco se recortan y caracteres de espacio en blanco interior así el carácter . se sustituyen por _. (Probado en Chrome 23, Firefox 13 e Internet Explorer 9, todo Win7.)

Cualquier carácter que se pueda incluir en un archivo [X] HTML está bien para poner en un <input name>. Como dice el comentario de Allain, <input name> se define como que contiene CDATA, por lo que las únicas cosas que no puedes poner ahí están los códigos de control y los puntos de código no válidos que el estándar subyacente (SGML o XML) Deshabilita.

Allain citado W3 de la especificación HTML 4:

  

Nota. Los "get" restringe método forman valores de ajuste de datos a caracteres ASCII. Sólo 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 datos application/x-www-form-urlencoded no tiene un mecanismo para especificar una codificación de nombres o valores del formulario, por lo que es “no especificado” el uso de caracteres no ASCII en cualquiera de trabajar y se debe utilizar publicado multipart/form-data lugar.

Por desgracia, en el mundo real, no hay ningún navegador especifica una codificación de campos aún cuando teóricamente podría, en las cabeceras subparte de una solicitud de POST multipart/form-data cuerpo. (Creo que Mozilla trató de poner en práctica una vez, pero se retiró, ya que rompió los servidores.)

Y no hay implementos navegador del RFC2231 estándar asombrosamente compleja y feo que sería necesario inserto codificado nombres de los campos que no son ASCII en los encabezados de la subparte de varias partes. En cualquier caso, la especificación de HTML que define multipart/form-data no dice directamente que RFC2231 se debe utilizar, y, de nuevo, se rompería si se trató de servidores.

Así que la realidad de la situación es que no hay manera de saber qué codificación se utiliza para los nombres y valores de un envío del formulario, no importa qué tipo de forma que es. ¿Qué navegadores van a hacer con los nombres y los valores que contienen caracteres no ASCII de campo es el mismo para GET y los dos tipos de formulario POST: que los codifica utilizando la codificación de la página que contiene el formulario utilizado. No ASCII nombres de formulario GET no se rompen más que cualquier otra cosa.

DLH:

  

Así que tiene nombre de un tipo de datos diferente para lo que lo hace para otros elementos?

En realidad, el único elemento cuyo atributo name no es CDATA es <meta>. Ver de la especificación HTML 4 para todos los diferentes usos de name; es un nombre de atributo sobrecargada, que tiene muchos significados diferentes en los distintos elementos. Esto generalmente se considera una mala cosa.

Sin embargo, por lo general en estos días que se evitaría name excepto los campos de formulario (donde es un nombre de control) y param (donde se trata de un identificador de parámetro complemento específico). Eso es sólo dos significados a resolver. El uso de la vieja escuela de name para identificar elementos como <form> o <a> en la página debe ser evitado (uso id en su lugar).

Si bien el comentario de Allain se pregunta y bobince directa la respuesta de OP proporcionó alguna brillante información en profundidad, creo que muchas personas vienen aquí en busca de respuesta a pregunta más específica: "¿Puedo utilizar un carácter de punto en el atributo de nombre de entrada de forma"

Como este hilo surgió como primer resultado cuando buscaba este conocimiento Supuse también puedo compartir lo que he encontrado.

En primer lugar, Matthias' afirmó que:

  

carácter. se sustituyen por _

Esto es falso. No sé si el navegador del hecho hicieron este tipo de operación de regreso en 2013 - sin embargo, lo dudo. Navegadores envían caracteres de punto, ya que están (hablando de los datos POST)! Se puede comprobar en las herramientas de desarrollo de cualquier navegador decente.

Por favor, observe que diminuta comentario de abluejelly, que probablemente se perdió por muchos:

  

Me gustaría tener en cuenta que esto es una cosa servidor específico, no es una cosa navegador. Probado en Win7 FF3 / 3,5 / 31, IE5 / 7/8/9/10 / Edge, Chrome39, y Safari 5 de Windows, y todos ellos enviados "this.stuff prueba" (cuatro espacios iniciales) como el nombre de la POST para el servidor dev ASP.NET incluye con VS2012.

Lo he comprobado con el servidor Apache HTTP (v2.4.25), y de hecho el nombre de entrada como "foo.bar" se cambia a "foo_bar". Pero en un nombre como "foo [foo.bar]" ese punto no es sustituido por _!

Mi conclusión: Puede utilizar los puntos pero no lo utilizaría ya que esto puede dar lugar a algunos comportamientos inesperados en función de servidor HTTP utiliza

.

¿Se refiere a la identificación y atributos nombre de la etiqueta HTML de entrada?

Si es así, estaría muy tentado para restringir (o convertir) permitidos "de entrada" caracteres del nombre en solamente AZ (AZ), 0-9 y una gama limitada de puntuacion ( " ''", etc. .), aunque sólo sea para limitar el potencial de XSS explota, etc.

Además, ¿por qué permiten al usuario controlar cualquier aspecto de la etiqueta de entrada? (Podría no en última instancia ser más fácil desde una perspectiva de validación para mantener a los nombres de las etiquetas de entrada son 'custom_1', 'custom_2', etc., y a continuación, asignar estos según se requiera.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top