tag style mvc example attribute html html5 escaping html-escape-characters

html - style - tag dd dt



¿Qué caracteres deben ser escapados en HTML 5? (3)

HTML 4 indica bastante de qué caracteres deben escaparse:

Las referencias de entidades de cuatro caracteres merecen una mención especial, ya que se utilizan con frecuencia para escapar de caracteres especiales:

  • "& lt;" representa el signo <
  • "& gt;" representa el signo>.
  • "&amperio;" representa el & signo.
  • "& quot; representa la" marca.

Los autores que deseen poner el carácter "<" en el texto deben usar "& lt;" (ASCII decimal 60) para evitar posibles confusiones con el comienzo de una etiqueta (etiqueta inicial delimitador abierto). Del mismo modo, los autores deben usar "& gt;" (ASCII decimal 62) en texto en lugar de ">" para evitar problemas con los agentes de usuario más antiguos que perciben incorrectamente esto como el final de una etiqueta (etiqueta delimitadora de cierre) cuando aparece en los valores de los atributos entre comillas.

Los autores deben usar "& amp;" (ASCII decimal 38) en lugar de "&" para evitar confusiones con el comienzo de una referencia de carácter (delimitador abierto de referencia de entidad). Los autores también deben usar "& amp;" en los valores de atributo, ya que las referencias de caracteres están permitidas dentro de los valores de atributo de CDATA.

Algunos autores utilizan la referencia de entidad de carácter "& quot;" para codificar instancias de comillas dobles ("), ya que ese carácter puede usarse para delimitar valores de atributo.

Me sorprende que no pueda encontrar nada como esto en HTML 5. Con la ayuda de grep, la única mención no XML que pude encontrar viene aparte en relación con el elemento XMP obsoleto :

Use pre y code en su lugar, y escape los caracteres "<" y "&" como "& lt;" y "& amp;" respectivamente.

¿Podría apuntar algo a la fuente oficial sobre este asunto?


Agregando mi voz para insistir en que las cosas no son tan fáciles, estrictamente hablando:

Caso 1: serialización HTML

(los más comunes)

Si serializa su HTML5 como HTML, "el texto no debe contener el carácter U + 003C MENOS MENOS QUE EL SIGNO (<) o un signo ambiguo".

Un signo ambiguo es un "signo" seguido de uno o más caracteres ASCII alfanuméricos, seguido de un carácter SEMICOLON U + 003B (;) "

Además, w3.org/html/wg/drafts/html/master/…

Por lo tanto, en ese caso, la editable && copy (observe los espacios alrededor de &&) es HTML5 en serie serial HTML válido, ya que ninguno de los símbolos es seguido por una letra.

Como ejemplo de contador: editable&&copy no es seguro (incluso si esto pudiera funcionar) ya que la última secuencia &copy puede interpretarse como la referencia de la entidad para ©

Caso 1: serialización XML

(los menos comunes)

Aquí se aplican las reglas clásicas de XML. Por ejemplo, todos y cada uno de los símbolos, ya sea en el texto o en los atributos, deben escaparse como &amp; .

En ese caso, && (con o sin espacios) no es válido para XML. Debes escribir &amp;&amp;

Difícil, ¿verdad?


De http://www.w3.org/html/wg/drafts/html/master/single-page.html#serializing-html-fragments

Escapar de una cadena (para los fines del algoritmo * anterior) consiste en ejecutar los siguientes pasos:

  1. Reemplace cualquier aparición del carácter "&" por la cadena "& amp;".
  2. Reemplace cualquier aparición del carácter U + 00A0 NO-BREAK SPACE por la cadena "& nbsp;".
  3. Si se invocó el algoritmo en el modo de atributo, reemplace cualquier aparición del carácter "" "por la cadena" & quot; ".
  4. Si no se invocó el algoritmo en el modo de atributo, reemplace cualquier ocurrencia del carácter "<" por la cadena "& lt;", y cualquier ocurrencia del carácter ">" por la cadena "& gt;".

* Algoritmo es el algoritmo de serialización incorporado tal como lo llama, por ejemplo, el captador de innerHTML .

Estrictamente hablando, esto no es exactamente una respuesta a su pregunta, ya que se trata de una serialización en lugar de un análisis. Pero, por otro lado, la salida serializada está diseñada para ser analizable de forma segura. Entonces, por implicación, al escribir el marcado:

  1. El carácter & debe reemplazarse por &amp;
  2. Los espacios que no se rompen deben escaparse como &nbsp; (¡sorpresa!...)
  3. Dentro de los atributos, " debe escaparse como &quot;
  4. Fuera de los atributos, < debe escaparse como &lt; y > debe ser escapado como &gt;

Intencionalmente escribo "debería", no "debo", ya que los analizadores pueden corregir las violaciones de lo anterior.


La especificación define la sintaxis de los elementos normales como:

Los elementos normales pueden tener texto, referencias de caracteres, otros elementos y comentarios, pero el texto no debe contener el carácter U + 003C MENSAJE DE MENSAJE (<) o un signo ambiguo. Algunos elementos normales también tienen aún más restricciones sobre el contenido que pueden contener, más allá de las restricciones impuestas por el modelo de contenido y las descritas en este párrafo. Esas restricciones se describen a continuación.

Así que tienes que escapar < , o & cuando te sigue cualquier cosa que pueda comenzar una referencia de personaje . La regla en ampersands es la única regla de este tipo para los atributos entre comillas, ya que la comilla coincidente es la única cosa que terminará con uno. (Obviamente, si no desea terminar el valor del atributo allí, salte de comillas).

Estas reglas no se aplican a <script> y <style> ; Debes evitar poner contenido dinámico en esos. (Si tiene que incluir JSON en un <script> , reemplace < con /x3c , el carácter U + 2028 con /u2028 , y U + 2029 con /u2029 después de la serialización JSON).