2009-05-29 20 views
45

En el atributo HTML name = value pares, ¿cuáles son los caracteres permitidos para la parte 'nombre'? ..... Mirando algunos common attributes parece que solo se usan letras (az y AZ), pero ¿qué otros caracteres también se podrían permitir? ... tal vez dígitos (0-9), guiones (-) y puntos (.) ... ¿hay alguna especificación para esto?¿Qué caracteres están permitidos en un nombre de atributo HTML?

+0

Esto suena como la pregunta que provocó Angular 2: P –

Respuesta

41

Depende de lo que quiere decir con "permitido". Cada etiqueta tiene una lista fija de nombres de atributos que son válidos, y en html no distinguen entre mayúsculas y minúsculas. En un sentido importante, solo estos personajes en la secuencia correcta están "permitidos".

Otra forma de verlo es qué caracteres tratarán los navegadores como un nombre de atributo válido. El mejor consejo aquí proviene de la especificación del analizador de HTML 5, que se puede encontrar aquí: https://html.spec.whatwg.org/multipage/syntax.html#attributes-2

Dice que todos los caracteres excepto tabulación, avance de línea, alimentación de formulario, espacio, solidus, mayor que signo, comillas, apóstrofo y el signo igual se tratará como parte del nombre del atributo. Personalmente, no intentaría empujar los casos extremos de esto sin embargo.

+5

Responda mi pregunta. "todos los personajes excepto ... serán tratados como parte del nombre del atributo" - ¡Felicitaciones por encontrar esta información, eso también en una especificación! –

+0

Sí, no lo "empuje". Algunos caracteres bastante comunes deberán escaparse en los selectores de CSS, otros romperán el resaltado de sintaxis de su editor, etc. – Rolf

+16

Como referencia, la expresión regular sería '/ ([^ \ t \ n \ f \ />" '= ] +)/' – Nate

4

Los valores permitidos se enumeran en w3.org. Si agrega un atributo personalizado, ya no está escribiendo HTML.

+0

Conclusivo. Entonces todos los caracteres permitidos son los que están en ese documento. ¡Gracias! –

+2

Eso no es del todo cierto ya que puede especificar sus propios atributos 'data-'. – ioquatix

+1

@ioquatix - ¡Fue cierto en 2009! E incluso con atributos de datos en la mezcla, es una forma muy específica de personalización que se define en la especificación. – Quentin

15

Suponiendo que está hablando de XHTML, se aplican las reglas XML.

Ver http://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name

Nombres y Tokens

[4]  NameStartChar  ::=  ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] 
[4a] NameChar  ::=  NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] 
[5]  Name  ::=  NameStartChar (NameChar)* 
[6]  Names  ::=  Name (#x20 Name)* 
[7]  Nmtoken ::=  (NameChar)+ 
[8]  Nmtokens  ::=  Nmtoken (#x20 Nmtoken)* 
+0

imho, esta debería ser la respuesta aceptada – revelt

9

Tal vez me falta algo, pero creo que la pregunta se basa en una suposición falsa. En HTML, los atributos son estrictamente defined según una especificación fija. Si 'inventa' sus propios nombres de atributos, ya no está escribiendo HTML válido.

+33

... a menos que sean atributos 'data- *' personalizados. –

+1

@MathiasBynens Genial, ¡todavía no sabía sobre eso! Aún así, tenga en cuenta que solo son válidos para HTML5, no para ninguna versión anterior de HTML. – Daan

+1

¿Por qué no usarías HTML5? –

Cuestiones relacionadas