¿Qué caracteres se deben escapar en los documentos XML, o dónde podría encontrar una lista de este tipo?
¿Qué caracteres se deben escapar en los documentos XML, o dónde podría encontrar una lista de este tipo?
Respuestas:
Si usa una clase o biblioteca apropiada, ellos harán el escape por usted. Muchos problemas de XML están causados por la concatenación de cadenas.
Solo hay cinco:
" "
' '
< <
> >
& &
Los caracteres de escape dependen de dónde se use el carácter especial.
Los ejemplos se pueden validar en el Servicio de validación de marcado W3C .
La forma segura es escapar de los cinco caracteres del texto. Sin embargo, los tres caracteres "
, '
y >
no necesitan escaparse en el texto:
<?xml version="1.0"?>
<valid>"'></valid>
La forma segura es escapar de los cinco caracteres en los atributos. Sin embargo, el >
personaje no necesita escapar en atributos:
<?xml version="1.0"?>
<valid attribute=">"/>
El '
carácter no necesita escapar en atributos si las comillas son "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Del mismo modo, "
no es necesario escapar a los atributos si las comillas son '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Los cinco caracteres especiales no se deben escapar en los comentarios:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Los cinco caracteres especiales no deben escaparse en las secciones CDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Los cinco caracteres especiales no deben escaparse en las instrucciones de procesamiento XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML tiene su propio conjunto de códigos de escape que cubren muchos más caracteres.
"
estas se cambiarán a&quot;
Quizás esto ayude:
Lista de referencias de entidades de caracteres XML y HTML :
En los documentos SGML, HTML y XML, las construcciones lógicas conocidas como datos de caracteres y valores de atributos consisten en secuencias de caracteres, en las que cada carácter puede manifestarse directamente (representarse a sí mismo), o puede representarse mediante una serie de caracteres llamados referencia de caracteres, de los cuales hay dos tipos: una referencia de caracteres numéricos y una referencia de entidad de caracteres. Este artículo enumera las referencias de entidades de caracteres que son válidas en documentos HTML y XML.
Ese artículo enumera las siguientes cinco entidades XML predefinidas:
quot "
amp &
apos '
lt <
gt >
De acuerdo con las especificaciones del World Wide Web Consortium (w3C), hay 5 caracteres que no deben aparecer en su forma literal en un documento XML , excepto cuando se usan como delimitadores de marcado o dentro de un comentario, una instrucción de procesamiento o una sección CDATA . En todos los demás casos, estos caracteres deben reemplazarse utilizando la entidad correspondiente o la referencia numérica de acuerdo con la siguiente tabla:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
Tenga en cuenta que las entidades mencionadas también se pueden utilizar en HTML, con la excepción de & apos; , que se introdujo con XHTML 1.0 y no se declara en HTML 4. Por este motivo, y para garantizar la retrocompatibilidad, la especificación XHTML recomienda el uso de & # 39; en lugar.
>
debe escaparse si sigue ]]
dentro del contenido, a menos que esté destinado a ser parte del ]]>
delimitador que indica el final de una sección CDATA.
Los caracteres de escape son diferentes para las etiquetas y los atributos.
Para etiquetas:
< <
> > (only for compatibility, read below)
& &
Para atributos:
" "
' '
De datos de caracteres y marcado :
El carácter de y comercial (&) y el paréntesis angular izquierdo (<) no deben aparecer en su forma literal, excepto cuando se usan como delimitadores de marcado, o dentro de un comentario, una instrucción de procesamiento o una sección CDATA. Si se necesitan en otro lugar, se deben escapar utilizando referencias de caracteres numéricos o las cadenas "& amp;" y "& lt;" respectivamente. El corchete angular derecho (>) puede representarse usando la cadena "& gt;" y debe, por compatibilidad, escapar usando "& gt;" o una referencia de caracteres cuando aparece en la cadena "]]>" en el contenido, cuando esa cadena no marca el final de una sección CDATA.
Para permitir que los valores de atributo contengan comillas simples y dobles, el carácter de apóstrofe o comillas simples (') puede representarse como "& apos;", y el carácter de comillas dobles (") como" & quot; ".
Nueva respuesta simplificada a una vieja pregunta común ...
Siempre (90% importante para recordar)
Valores de atributo (9% importante para recordar)
attr="
'
Las comillas simples '
están bien entre comillas dobles."
attr='
"
Las comillas dobles "
están bien dentro de comillas simples.'
"
como "
y de '
lo '
contrario.Comentarios , CDATA e instrucciones de procesamiento (0.9% importante para recordar)
<!--
Dentro de los comentarios -->
no se debe escapar nada, pero no --
se permiten condiciones.<![CDATA[
Dentro de CDATA ]]>
no se debe escapar nada, pero no ]]>
se permiten cadenas.<?PITarget
Dentro de los PI ?>
no se debe escapar nada, pero no ?>
se permiten cadenas.Esotérica (0.1% importante para recordar)
]]>
como a ]]>
menos que ]]>
esté terminando una sección CDATA. ]]>
debe escapar como ]]>
, incluso cuando no está en una sección CDATA. La forma más fácil de alcanzar que puede ser la de siempre escapar >
tan >
.
]]>
pero elegí relegarla a esotérica en lugar de sugerir que >
siempre se escape (lo cual no es necesario, como saben). Mi objetivo aquí es hacer que las reglas de escape XML sean fáciles de recordar y 100% precisas .
AttValue
citada en mi respuesta a través de un enlace en 2. Valores de atributo .
Además de los cinco caracteres comúnmente conocidos [<,>, &, "y '], también escaparía del carácter de tabulación vertical (0x0B). Es UTF-8 válido, pero no es válido XML 1.0, e incluso muchas bibliotecas (incluida la biblioteca altamente portátil (ANSI C) libxml2 ) lo omite y genera silenciosamente XML no válido.
Abreviado de: XML, Escaping
Hay cinco entidades predefinidas:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Todos los caracteres Unicode permitidos pueden representarse con una referencia de caracteres numéricos". Por ejemplo:
中
La mayoría de los caracteres de control y otros rangos Unicode están específicamente excluidos, lo que significa (creo) que no pueden ocurrir ya sea escapados o directos:
Depende del contexto. Para el contenido, es < y & , y ]]> (aunque una cadena de tres en lugar de un carácter).
Para valores de atributo, es < , & , " y ' .
Para CDATA, es ]]> .
Solo <
y &
se requiere que se escapen si se van a tratar los datos de caracteres y no el marcado:
<company>AT&T</company>