为什么RSS不能处理&符号?

时间:2009-06-23 00:46:39

标签: xml encoding rss

当我遇到一个破碎的RSS提要时,通常会将其全部炸成碎片的原因是因为第23行说“Sanford& Sons”。

最令人困惑的事实是,如果您将&转换为&,一切都很顺利,即使您的替代方案仍包含问题字符。

为什么RSS在默认情况下渲染&符号(&)时失败?

7 个答案:

答案 0 :(得分:11)

当'生'和'可以看出,翻译正在寻找有效的逃脱者之一。序列(例如'&')。找到无效序列时会抛出错误。这就是它的全部内容。

答案 1 :(得分:6)

因为rss是基于XML的格式,而在xml中,&符号(&)表示xml 实体的开头。解析器期待其他东西。

你可以说它应该足够聪明,知道"Sanford & Sons"中的&符号只是一个&符号。但是当你真的想用文字显示&符时呢? "&pc;是一些自定义(也是无效的)实体,还是应该将其解释为&符号呢?那么"&"呢?

答案 2 :(得分:5)

因为它必须以XML语法进行转义。同样的原因在这里。

http://myst-technology.com/public/item/11878

答案 3 :(得分:3)

&是XML在SGML中的根源。在那里& ...;语法用于转义所有类型的东西,甚至整个文档嵌入。因此,如果你想使用文字“&”你必须逃脱它。它与在任何编程语言中使用字符串内的引号相同。

让XML进行某种类型的纠错是没有用的“如果没有字母跟随,输出文字&”,因为这会破坏SGML语法XML,如上所述,基于。

大多数浏览器在HTML中这样做是因为他们说,用户看到任何的东西比SGML解析错误更好。但这会打开一个全新的Pandora盒子,其中浏览器会进行哪种错误更正。查看HTML5规范,您将看到真正定义错误处理的含义。这是很多文字。

一个特例:您可以包含文字“&”在XML / RSS中,如果将其括在所谓的“CDATA”部分中。这将如下所示:

<项目> <![CDATA [ 史密斯&韦森 ]> < /项目>

干杯,

答案 4 :(得分:2)

因为RSS是XML,并且XML要求转义某些字符,例如&符号。

答案 5 :(得分:1)

这在很大程度上取决于RSS客户端,但很可能它正在尝试对内容进行XML解码(在您的示例中为“Sanford& Sons”)。当发生这种情况时,&表示转义字符。如果您在解码时不使用&,它将尝试使用接下来的几个字符来完成转义序列。赔率极有可能会失败。

答案 6 :(得分:0)

不确定这是否有帮助但是当我需要解决这个问题时,我使用了数字实体ref作为&符号的&符号。通过w3c验证器运行,所以我想可以使用它。

干杯