2011-03-16 20 views
25

¿Debo escapar las comillas dentro de un valor de atributo html? ¿Qué personajes están permitidos?¿Qué valores puedo poner en un valor de atributo HTML?

¿Es esto válido?

<span title="This is a 'good' title.">Hi</span> 
+0

Salida del atributo title en la especificación HTML5 más reciente: http://dev.w3.org/html5/spec/Overview.html#the-title-attribute Creo que el atributo de título utiliza el tipo CDATA que se define aquí: http://www.w3.org/TR/html401/types.html # tipo-cdata –

+0

Pregunta solamente sobre el símbolo comercial: http://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href (apareció antes, por desgracia, así que no hay engaño ...) –

Respuesta

37

Si es citado a su valor de atributo (comienza y termina con comillas dobles "), luego se permiten los caracteres excepto las comillas dobles y los signos y entre símbolos, que deben citarse como &quot; y &amp;, respectivamente (o las referencias a entidades numéricas equivalentes, &#34; y &#38;)

También puede utilizar comillas simples alrededor de un valor de atributo. Si hace esto, puede usar comillas dobles literales dentro del atributo: <span title='This is a "good" title.'>...</span>. Para evitar comillas simples dentro de dicho valor de atributo, debe usar la referencia de entidad numérica &#39;, ya que algunos navegadores no son compatibles con la entidad nombrada, &apos; (que era not defined in HTML 4.01).

Por otra parte, también se pueden crear atributos sin comillas, pero que restringe el conjunto de caracteres que puede tener dentro de ella mucho más allá, no permitir el uso de espacios, =, ', ", <, >, ` en el atributo .

Ver the HTML5 spec para más detalles.

+1

¿Cuál es la razón por la cual se requiere escapar de los símbolos '&'? ¿Qué puede significar? –

+5

Ah, vale, es porque el ampersand en sí mismo sería analizado como una entidad. –

+4

Ampersand es un carácter válido en un valor de atributo. La especificación prohíbe "ampersand ambiguo", que es la combinación de (caracteres ampersand + alfanuméricos + punto y coma) donde no coincide con ninguna de las referencias nombradas. '' - válido '' - no válido – Semra

3

El valor puede ser cualquier cosa, pero debe escapar comillas (&quot;, &apos;), delimitadores de etiquetas (&lt;, &gt;) y los símbolos de unión (&amp;).

+0

This no se ve bien (ver enlace a las especificaciones en las otras respuestas). – Christophe

+0

no parece desautorizar <, >, etc. La especificación solo desautoriza ampersands. – arviman

4

Eso es válido. Sin embargo, si tuviera que poner comillas dobles en el interior, que tendría que escapar con &quot; así:

<span title="This is a &quot;good&quot; title.">Hi</span> 
1

Sí, eso está bien. El problema sería cuando intentas poner una Cita doble dentro de un atributo. de esta manera:

<span title="This is a "bad" title.">Hi</span> 

Usted puede evitar esto mediante el uso de entidades HTML así:

<span title="This is a &quot;good&quot; title">Hi</span> 
0

Aquí es una función de validación utilizando una expresión regular basado en la respuesta de Brian Campbell, de peor caso de no indicada atributo.

validator: function (val) { 
    if (!val || val.search(/['"=<>`]+|(&\s)+/) === -1) return true; 
    return 'Disallowed characters in HTML attributes: \' " = < > ` &.'; 
}, 
Cuestiones relacionadas