【问题标题】:loading xml document fails with special character »加载 xml 文档失败并出现特殊字符 »
【发布时间】:2010-11-09 05:50:15
【问题描述】:

我正在使用一个 RSS 提要,并且该文档包含一个特殊字符 »

我猜测提要的编码不正确,但我无法更改。我想覆盖它或者只是用友好的东西替换有问题的字符。

using (Stream stream = response.GetResponseStream())
        {

            using (XmlReader reader = XmlReader.Create(stream))
            {
                try
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(reader);  //<--- FAILS HERE
                    //parse the items of the feed

...

【问题讨论】:

标签: c# xml unicode rss


【解决方案1】:

&amp;raquo;HTML named entity,在 XML 中不受支持。开箱即用的 XML only supports &amp;amp;&amp;apos;&amp;quot;&amp;gt;&amp;lt;

改用对应的数字实体&amp;#187;(或十六进制&amp;#xbb;)。

【讨论】:

    【解决方案2】:

    +1 弗雷德里克所说的。您还可以将 » 用作原始未转义字符,大概是用 UTF-8 编码的。

    如果是其他人的 RSS 提要,您需要踢掉他们以停止生成格式错误的 XML;没有 XML 解析器会读取此内容。

    &lt;description&gt; 元素中,HTML 内容通常应进行 XML 转义。所以如果项目的描述是This is a &lt;em&gt;really&lt;/em&gt; interesting article,它应该在XML中显示为:

    <description>This is a &lt;em>really&lt;/em> interesting article</description>
    

    因此,一个 HTML 编码的 » 字符应该是

    &amp;raquo;
    

    如果它直接从 HTML 源中包含而没有被转义,那就是更严重的 XML 注入问题。

    (这是假设 RSS 2.0。在各种早期版本的 RSS 中,&lt;description&gt; 是否包含 HTML 或纯文本因规范而异,有时完全未指定。对于旧 RSS 版本,使用 HTML 并不可靠内容。)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    相关资源
    最近更新 更多