2010-08-25 17 views
14

Ahora desarrollo sitios web e interfaces XML desde hace 7 años, y nunca, nunca he estado en una situación, donde era realmente necesario utilizar el &gt; para un >. Toda la eliminación de ambigüedades podría manejarse hasta el momento citando <, &, " y '.¿Es necesario > alguna vez?

¿Alguna vez alguien ha estado en una situación (relacionada con, por ejemplo, procesamiento SGML, problemas con el navegador, XSLT, ...) donde ha encontrado que es inescindible escapar del signo más grande que &gt;?

Actualización: acabo de comprobar con el XML spec, donde dice, por ejemplo, sobre los datos de caracteres en la sección 2.4:

datos de tipo carácter

[14]  CharData  ::=  [^<&]* - ([^<&]* ']]>' [^<&]*) 

Así que incluso allí, el > no se menciona como algo especial, excepto en la secuencia final de una sección CDATA.

Ésta solo caso, en el que el > es de alguna importancia, sería el final de una sección CDATA, ]]>, pero por otra parte, si lo que cita, la cita (es decir, la cadena literal ]]&gt;) haría aterrizar literalmente en la salida (ya que es CDATA).

+4

Tal vez no entienden, pero ayuda a prevenir la inyección de HTML/JS. También es obligatorio si el resultado html debe ser xhtml complient. – Nate

+4

Creo que es más por simetría con '' < ''que cualquier otra cosa. –

+1

Nunca fue necesario porque los navegadores no son como compiladores, son demasiado permisivos/indulgentes, de ahí el desconocimiento de los estándares en toda la web. ¿No estás escapando "'" en una cadena de JavaScript? ('var test = 'Lo diré';') Esto es lo mismo. –

Respuesta

7

No es necesario porque absolutamente cualquier intérprete de XML entenderá lo que quiere decir. Pero aún usas un personaje especial sin ninguna protección si lo haces.

XML se trata de semántica, y esto no es realmente semántico.

Acerca de su actualización , se le olvidó esta parte:

El símbolo mayor que (>) puede ser representado usando la cadena ">", y debe, por compatibilidad, se escapó utilizando "&gt; "o una referencia de carácter cuando aparece en la cadena" ]]> "en el contenido, cuando esa cadena no marca el final de una sección CDATA.

El caso de uso dado en la documentación es más acerca de algo como esto:

<xmlmarkup> 
]]> 
</xmlmarkup> 

Aquí la parte ]]> podría ser un problema con los viejos programas de análisis SGML, por lo que debe se escapó a = ]]&gt; por razones de compatibilidad.

+1

¿Qué pasa con la parte * casi *? ¿Hay alguno que obtenga un hickup de un '>' sin comillas? – Boldewyn

+1

Bueno, si alguien escribió un Analizador XML que solo respeta los estándares XML, podría suceder. No conozco un analizador sintáctico que pueda tener este comportamiento, pero no sería su culpa ni su problema. –

+0

Un analizador XML que respeta los estándares XML DEBE aceptar '>' sin comillas. Creo que el párrafo que citó se refiere a la compatibilidad con analizadores no conformes o tal vez con una versión anterior (borrador) de la especificación. – Daniel

3

No tanto como autor de documentos (x) html, sino más como usuario de campos de comentarios escritos descuidados en sitios web, que "le ofrecen" insertar html.

Quiero decir, si usted hace su sitio de la manera correcta, de todos modos no codificaría su contenido, ¿verdad? Así que su llamada al htmlentities o lo que sea (mucho tiempo sin verte, php) se encargaría de reemplazar los caracteres especiales por usted. Así que seguro, no escribiría manualmente &gt;, pero espero que tome medidas para que > se sustituya automáticamente.

3

Utilicé one not 19 hours para pasar un estricto validador de xml. Otro caso es cuando los usa en realidad en texto de contenido html/xml (en lugar de atributos), como este: <.

Claro, un analizador laxo aceptará casi cualquier cosa que le arroje, pero si alguna vez le preocupa XSS, & lt; es tu amigo.

Actualización: He aquí un ejemplo en el que tiene que escapar > en Firefox:

<?xml version="1.0" encoding="utf-8" ?> 
<test> 
    ]]> 
</test> 

Por supuesto, todavía no es un ejemplo de tener que escapar de una solitaria >.

+0

En realidad, ¿su ejemplo referenciado también ha funcionado, si * solo * ha escapado de '<'? Ese es exactamente mi caso. Y si no es así, ¿el analizador está equivocado o he omitido el lugar en la especificación XML? http://w3.org/TR/xml/#NT-AttValue – Boldewyn

+0

Bien, ahora veo el punto al que intenta llegar. Actualicé la publicación con un ejemplo que proporciona errores de parchado en Firefox, pero lo analizaría si no necesitara escapar>. – Douglas

+1

Sí, ahora estamos pensando lo mismo. Colin y yo encontramos ese también. Parece que, al menos en el mundo "parte XML de SGML", este es el único ejemplo relevante en el que '>' tiene sentido. – Boldewyn

0

me acaba de ocurrir otro ejemplo, donde es necesario citar > en HTML5 (no XHTML5) documentos: Si lo necesita en atributos sin comillas (lo cual es algo que puede argumentar, por supuesto).

<img src=arrow.png alt=&gt;> 

debería ser equivalente a XHTML

<img src="arrow.png" alt=">" /> 

Pero, de nuevo, (? <! X) HTML no es SGML.

0

Imagine que tiene el siguiente texto this is a not a ]]> nice day y decide rodearlo con las secciones CDATA <![CDATA[this is a not a ]]> nice day]]>.

el fin de evitar que (y para permitir el análisis de fragmentos de SGML con secciones marcadas no terminados), cláusula 10.4 de la norma ISO 8879: 1986 declara que la ocurrencia de ]]> fuera de un sección marcada es un error.

Además, en los tiempos de SGML las secciones marcadas eran muy populares, ya que no solo se usaban para CDATA (como en XML), sino también para RCDATA (solo entidades y referencias de caracteres permitidas) e IGNORE e INCLUDE (lo que permitía para el reconocimiento del marcado dentro de ellos).

Por ejemplo, en SGML se podría escribir:

<!ENTITY %WHATTODO "INCLUDE"> 
<![%WHATTODO;[<b>]]&gt;</b>]]> 

lo que equivale a:

<b>]]&gt;</b> 
Cuestiones relacionadas