Al generar HTML, hay varios lugares diferentes donde el texto se puede interpretar como caracteres de control en lugar de como literales de texto. Por ejemplo, en el texto "normal" (es decir, fuera de cualquier elemento de marcado):¿Cuáles son todos los contextos de escape de HTML?
<div>This is regular text</div>
así como dentro de los valores de atributos:
<input value="this is value text">
Y, creo, dentro de los comentarios HTML:
<!-- This text here might be programmatically generated
and could, in theory, contain the double-hyphen character
sequence, which is verboten inside comments -->
Cada uno de estos tres tipos de texto tiene reglas diferentes para la forma en que debe ser escapado con el fin de ser tratada como no marcado. Así que mi primera pregunta es, ¿hay algún otro contexto en HTML en el que los caracteres se puedan interpretar como caracteres de marcado/control? Los contextos anteriores claramente tienen diferentes reglas sobre lo que se debe evitar.
La segunda pregunta es, ¿cuáles son las listas canónicas de caracteres (para cada contexto) que se deben escapar para garantizar que cualquier texto incrustado se trate como no marcado? Por ejemplo, en teoría solo necesita escapar 'y "en valores de atributo, ya que dentro de un valor de atributo solo el carácter de delimitador de cierre (' o" dependiendo del delimitador con el que comenzó el valor de atributo) tendría significado de control. Del mismo modo, dentro del texto "normal", solo < y & tienen un significado de control. (Me doy cuenta de que no todos los analizadores HTML son idénticos. Lo que más me interesa es cuál es el conjunto mínimo de caracteres que necesitan escaparse para apaciguar un analizador que cumpla con las especificaciones.)
Tangencial: El siguiente texto arrojará errores como HTML 4.01 Strict:
<a href="http://example.com/file.php?x=1&y=2">foo</a>
en concreto, se dice que no sabe lo que se supone que la entidad "& y" para ser. Si pone un espacio después del &, sin embargo, lo valida bien. Pero si está generando esto sobre la marcha, probablemente no querrá comprobar si cada uso de & causará un error de validación, y en su lugar solo escape todos los valores de atributo &.
Por cierto, me di cuenta de que no hay "secuencia de escape" para - dentro de un comentario HTML; simplemente están prohibidos (dado que los comentarios son ignorados por el analizador y no son procesados, una secuencia de escape no serviría para nada). Si por algún motivo necesitas incluir un comentario que incluya -, deberías quitarlo o reemplazarlo por algo menos ofensivo (U + 2014 EM DASH, por ejemplo). – dirtside
tan simplemente ponga cuál es su pregunta. – Kieran