2009-06-23 6 views
10

Cuando me encuentro con un suministro RSS roto, la razón habitual es que todo se ha volado en pedazos porque la línea 23 dice "Sanford & Hijos".¿Por qué RSS no puede manejar el ampersand?

Lo más confuso es el hecho de que si convierte el & en &, todo está bien, aunque su alternativa aún contenga el carácter problemático.

¿Por qué falla el RSS al representar el carácter de ampersand (&) de forma predeterminada?

Respuesta

10

Cuando un 'en bruto' & se ve, el intérprete está buscando una de las válida escaparon & secuencias (tales como '&'). Cuando se encuentra una secuencia inválida arroja un error. Eso es todo al respecto.

+0

Sí, pero ¿por qué? :) – Sampson

+6

.. debido a la especificación XML –

+3

Esto no es diferente de preguntar por qué no puede usar raw < and > en texto XML – ironfroggy

1

Esto depende en gran medida del cliente RSS, pero lo más probable es que intente descodificar XML los contenidos (en su ejemplo "Sanford & Hijos"). Cuando eso sucede, & indica un carácter de escape. Si no usa &amp; mientras se descodifica, intentará utilizar los siguientes caracteres para completar la secuencia de escape. Es muy probable que las probabilidades fallen.

2

Porque RSS es XML y XML exige que se escapen ciertos caracteres, como el símbolo comercial.

6

Porque rss es un formato basado en XML y en xml, el símbolo comercial (&) significa el inicio de una entidad xml . El analizador está esperando algo más allí.

Se podría argumentar que debe ser lo suficientemente inteligente como para saber que el símbolo de "Sanford & Sons" es solo un símbolo. Pero, ¿qué pasa cuando realmente quieres mostrar el signo y el texto? ¿Es "&pc; alguna entidad personalizada (también inválida) o debería interpretarse como un ampersand también? ¿Qué hay de "&amp;amp;"?

2

El & es un resto de las raíces de XML en SGML. Ahí está el & ...; la sintaxis se usa para escapar todo tipo de cosas, incluso documentos enteros para incrustar. Por lo tanto, si desea utilizar un literal "&", tiene que escapar. Es lo mismo que usar comillas dentro de cadenas en cualquier lenguaje de programación.

No sirve de nada que XML haga algún tipo de corrección de errores del tipo "Si no hay una carta siguiente, genere un literal &", porque eso rompería la sintaxis SGML XML, como se dijo, basado en.

Que lo hace en HTML la mayoría de los navegadores es porque, como dijeron, es mejor para los usuarios ver cualquier cosa que que SGML analizar. Pero esto abre una nueva caja de Pandora cuyo navegador hace qué tipo de correcciones de errores. Mira las especificaciones de HTML5 y verás lo que significa realmente definir el manejo de errores. Es mucho texto

Un caso especial: Usted puede incluir un literal "&" en XML/RSS, si se encierra en una sección llamada "CDATA".Eso va a ser similar al siguiente:

< item> < [CDATA [ Smith & Wesson ]]> </item>

Cheers,

0

No estoy seguro si esto ayuda, pero cuando Necesitaba resolver este problema. Utilicé la entidad numérica ref para un ampersand que es & Ejecutando esto a través del validador w3c aprobado, así que supongo que está bien usarlo.

Cheers

Cuestiones relacionadas