¿Cómo escape ampersands en XML para que se representen como entidades en HTML?


Tengo un texto XML que quiero representar en una página HTML. Este texto contiene un ampersand, que quiero representar en su representación de entidad: &.

¿Cómo puedo escapar de este ampersand en el XML de origen? Probé &, pero esto se decodifica como el carácter ampersand real (&), que es inválido en HTML.

Así que quiero escaparlo de tal manera que se renderice como & en la página web que usa la salida XML.

 452
Author: Community, 2009-08-25

12 answers

Cuando su XML contiene &, esto dará como resultado el texto &.

Cuando lo use en HTML, se mostrará como &.

 354
Author: Wim ten Brink,
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
2016-08-30 14:43:32

Según §2.4 de la especificación XML 1.0, debería poder usar &.

Lo intenté & pero esto no está permitido.

¿Estás seguro de que no es un tema diferente? XML define explícitamente esto como la forma de escapar de los ampersands.

 183
Author: John Feminella,
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-10-04 03:10:02

El carácter & es en sí mismo un carácter de escape en XML, por lo que la solución es concatenarlo y un equivalente decimal Unicode para & asegurando así que no haya errores de análisis XML. Es decir, reemplace el carácter & con &.

 111
Author: trouble,
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-14 13:43:13

Etiquetas CDATA?

     <![CDATA[
       This is some text with ampersands & other funny characters. >>
     ]]>
 58
Author: scragar,
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
2009-08-25 14:14:29

&amp; debería funcionar bien, Wikipedia tiene una Lista de entidades predefinidas en XML.

 39
Author: nikc.org,
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
2009-08-25 14:14:19

En mi caso tuve que cambiarlo a %26.

Necesitaba escapar & en una URL. Así que &amp; no funcionó para mí. La función urlencode cambia & a %26. De esta manera, ni XML ni el mecanismo de URL del navegador se quejaron de la URL.

 9
Author: Serhat Akay,
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-04-08 15:29:49

He intentado y, pero no funcionó. Basado en la respuesta de Wim ten Brink lo intenté y funcionó.

Uno de mis compañeros desarrolladores me sugirió usar & y eso funcionó independientemente de cuántas veces se pueda renderizar.

 4
Author: mcampos,
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-04-08 15:27:41

&amp; es la forma de representar un ampersand en la mayoría de las secciones de un documento XML.

Si desea que XML se muestre dentro de HTML, primero debe crear XML correctamente codificado (lo que implica cambiar & a &amp;) y luego use eso para crear HTML correctamente codificado (lo que implica nuevamente cambiar & a &amp;). Eso resulta en:

&amp;amp;

Para una explicación más detallada de la codificación XML, ver:

Qué caracteres necesito para escapar en XML los documentos?

 3
Author: Riley Major,
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-05-23 12:02:49

<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> hará el truco.

 2
Author: Rick,
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
2011-03-02 01:58:30

¿Qué tal usar unicode \u0026? Funciona para mí en mis archivos XML de Android. Si surgen problemas, alguien me avisa.

 2
Author: Scott Biggs,
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-04-09 18:57:36

Un problema relacionado es cómo codificar el contenido del elemento XML cuando dicho contenido contiene un ampersand if si el XML es parte de un URI enviado con una acción GET. (Dejando a un lado la sabiduría de tal API was era algo con lo que tenía que lidiar hoy.) Probé todo lo mencionado anteriormente, y lo único que realmente funcionó fue %26amp; El %26 se necesitaba para codificar el primer carácter en la codificación XML para ampersand. El amp; después del %26 era necesario porque la porción XML de la URI se estaba cargando en un servidor de documentos XML. Así que en este divertido escenario, era necesario unir ambas metodologías de codificación.

 0
Author: StackOverflowUser,
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
2016-12-21 03:23:07

Considere si su XML se ve como a continuación.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

No puede usar el <> directamente ya que lanza un error. En ese caso, puede usar &#60;&#62; en reemplazo de eso.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

Haga Clic aquí para ver todos los códigos.

 0
Author: Sarath Avanavu,
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-04-08 15:30:33