¿Qué caracteres necesito para escapar en documentos XML?


¿Qué caracteres deben escaparse en los documentos XML o dónde puedo encontrar dicha lista?

Author: animuson, 2009-07-07

9 answers

Si usa una clase o biblioteca apropiada, ellos harán el escape por usted. Muchos problemas XML son causados por la concatenación de cadenas.

Caracteres de escape XML

Solo hay cinco: {[17]]}

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

Los caracteres de escape dependen de dónde se use el carácter especial.

Los ejemplos se pueden validar en W3C Markup Validation Service.

Texto

La forma segura es escapar de los cinco caracteres en el texto, sin embargo, los tres personajes ", ' y > no necesita ser escapado en el texto:

<?xml version="1.0"?>
<valid>"'></valid>

Atributos

La forma segura es escapar de los cinco caracteres en atributos, sin embargo, el carácter > no necesita escaparse en atributos:

<?xml version="1.0"?>
<valid attribute=">"/>

El carácter ' no necesita escaparse en los atributos si las comillas son ":

<?xml version="1.0"?>
<valid attribute="'"/>

Del mismo modo, el " no necesita ser escapado en atributos si las comillas son ':

<?xml version="1.0"?>
<valid attribute='"'/>

Comentarios

Los 5 caracteres especiales no debe escaparse en los comentarios:

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

CDATA

Los 5 caracteres especiales no deben escaparse en CDATA secciones:

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>

Instrucciones de procesamiento

Los 5 caracteres especiales no deben escaparse en las instrucciones de procesamiento XML:

<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>

XML vs HTML

HTML tiene su propio conjunto de códigos de escape que cubren muchos más caracteres.

 1171
Author: Welbog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-02 13:27:27

Tal vez esto ayude:

Lista de referencias de entidades de caracteres XML y HTML:

En documentos SGML, HTML y XML, el construcciones lógicas conocidas como carácter los valores de datos y atributos consisten en secuencias de caracteres, en las que cada el carácter puede manifestarse directamente (representándose a sí mismo), o puede ser representado por una serie de personajes se llama una referencia de caracteres, de los cuales hay dos tipos: un numérico referencia de caracteres y una caracter referencia de entidad. Este artículo enumera la entidad de carácter hace referencia a son válidos en documentos HTML y XML.

Ese artículo enumera las siguientes cinco entidades XML predefinidas:

quot  "
amp   &
apos  '
lt    <
gt    >
 88
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-07 18:33:16

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 sustituirse utilizando la entidad correspondiente o la referencia numérica según la siguiente tabla:

Carácter OriginalXML entidad de reemplazoXML numérico de reemplazo

> > >
" "                               "                                    
&                              &                               &                                    
'                               '                               '                                    

Tenga en cuenta que las entidades mencionadas anteriormente se pueden utilizar también en HTML, con la excepción de ', que se introdujo con XHTML 1.0 y no está declarado en HTML 4. Por esta razón, y para asegurar la retro-compatibilidad, la especificación XHTML recomienda el uso de ' en su lugar.

 67
Author: Albz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-03 12:38:30

Los caracteres de escape son diferentes para las etiquetas y los atributos.

Para etiquetas:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;

Para atributos:

" &quot;
' &apos;

Http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

El carácter ampersand ( & ) y el soporte angular izquierdo ( ) se puede representar usando el string">", y debe, por compatibilidad, ser escapado usando cualquiera "> "o una referencia de carácter cuando aparece en la cadena" ]]> "en el contenido, cuando esa cadena no marca el final de un CDATA apartado.

Para permitir que los valores de atributo contengan comillas simples y dobles, el apóstrofo o el carácter de comilla simple (') puede ser represented as " '", y el carácter de comillas dobles ( "") como" " ".

 45
Author: Peter Bartels,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-27 21:39:32

Además de los cinco caracteres comúnmente conocidos [, &, ", '] También escaparía del carácter de tabulación vertical (0x0B). Es UTF-8 válido, pero no XML 1.0 válido, e incluso muchas bibliotecas (incluida libxml2) lo pierden y emiten silenciosamente XML no válido.

 19
Author: Charon ME,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-25 18:23:37

Respuesta nueva y simplificada a una vieja pregunta común...

Escape XML simplificado

  1. Siempre (90% importante recordar)

    • Escape < as &lt; unless < is starting a <tag/>.
    • Escape & as &amp; unless & is starting an &entity;.
  2. Valores de atributo (9% importante para recordar)

    • attr=" 'las comillas simples' están bien dentro de comillas dobles."
    • attr=' "Las comillas dobles" están bien dentro de comillas simples.'
    • Escape " as &quot; and ' as &apos; otherwise.
  3. Comentarios, CDATA, y Instrucciones de Procesamiento (0.9% importante recuerda)

    • <!-- Dentro de comentarios --> nada tiene que escaparse, pero no se permiten cadenas --.
    • <![CDATA[ Dentro de CDATA ]]> nada tiene que escaparse, pero no se permiten cadenas ]]>.
    • <?PITarget Dentro de IPs ?> nada tiene que escaparse, pero no se permiten cadenas ?>.
  4. Esoterica (0.1% importante recuerda)

    • Escape ]]> as ]]&gt; unless ]]> is ending a CDATA section.
      (Esta regla se aplica a los datos de caracteres en general, incluso fuera de una sección CDATA.)
 10
Author: kjhughes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-03 13:34:55

Abreviado de: http://en.wikipedia.org/wiki/XML#Escaping

Hay cinco entidades predefinidas:

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "

"Todos los caracteres Unicode permitidos pueden representarse con una referencia de caracteres numéricos. "Por ejemplo:

&#20013;

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 ni escapados ni directos:

Http://en.wikipedia.org/wiki/Valid_characters_in_XML

 4
Author: Tim Cooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-15 07:53:58

, depende del contexto. Para el contenido, es (aunque cadena de 3 en lugar de un carácter). Para los valores de atributo, es .

 3
Author: 把友情留在无盐,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-04 14:36:52
 -3
Author: Questionless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-02 14:17:38