【问题标题】:XML invalid using the following characters £ ` –使用以下字符的 XML 无效 £ ` –
【发布时间】:2013-01-22 10:38:47
【问题描述】:

我正在尝试创建一个将使用 W3C 验证器进行验证的 RSS 提要。 我不断从以下包含字符 £`- 的 URL 中遇到问题

这里是网址:

http://www.example.co.uk/news/2012/april/stamp-rationing-–-why-the-royal-mail-are-ripping-you-off

这是错误:

此 Feed 未通过验证。 第 14 行,第 119 列:链接必须是完整且有效的 URL:http://www.example.co.uk/news/2012/april/stamp-rationing-–-why-the-royal-mail-are-ripping-you-off [帮助] ... - 为什么皇家邮件是在扯掉你

我尝试用转义字符替换符号,但这不起作用。以下是我一直在使用的转义字符:

 Text = Text.Replace("-", "&#45");
            Text = Text.Replace("£", "%C2%A");
            Text = Text.Replace("`", "%60");
            Text = Text.Replace("’", "%60");  

有人知道如何解决这个问题吗?这里还有一些给我带来问题的链接:

http://www.example.co.uk/news/2012/march/for-sale-3-bed-detached-london-home-15,000 英镑

错误:

此 Feed 未通过验证。 第 14 行,第 106 列:链接必须是完整且有效的 URL:http://www.example.co.uk/news/2012/march/for-sale-3-bed-detached-london-home-£15,000 [帮助] ... -sale-3-bed-detached-london-home-£15,000

【问题讨论】:

  • 破折号应该没问题 - 你确定这些会导致问题吗?

标签: c# xml xml-validation


【解决方案1】:

在将 URL 发布到 RSS 之前,您需要 URL encode

var encoded = HttpUtility.UrlEncode(aUrl);

请注意,URL 不能直接使用,因为 :/ 等也会被编码。

如果您希望这些值是有效的 XML,请改用 SecurityElement.Escape

var escaped = SecurityElement.Escape(aUrl);

【讨论】:

    【解决方案2】:

    我正在为我的系统构建一个 API,并且我一直在使用一些东西来规范化这些字段。尝试使用 PHP 过滤:

    $value = preg_replace('/[^a-z]/i', '', $value);
    $value = preg_replace('/[^\x09\x0A\x0D\x20-\x7F]/e', '"&#".ord($0).";"', $value);
    $value = htmlentities($value, ENT_NOQUOTES, 'UTF-8', false);
    

    【讨论】:

    【解决方案3】:

    答案是要么使用 UTF-8 编码,要么将非 ascii 字符转换为 XML 实体。

    • UTF-8 编码:确保文档以 UTF-8 输出,并包含相关的编码标头。

      另见UTF-8 encoding xml in PHP

    • 实体编码:将所有非 ASCII 字符转换为 XML 实体。

      XML 实体看起来像这样:£(那个是£ 符号)。大多数编程语言会在您生成 XML 文档时自动为您执行此操作,或提供执行此操作的标准函数。您没有指定您使用的语言,但以上内容应该可以帮助您找到合适的 API 函数。

    您应该做的一件事是手动生成XML 数据(即输出标签和属性,作为字符串),或者手动替换实体的字符串。您应该为此使用适当的 API。手动生成 XML(或任何其他标准数据格式)总是可能以这样的问题告终,如果工具就在您面前正确地做,那么用困难的方式做这件事似乎有点疯狂.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2015-05-14
      • 1970-01-01
      相关资源
      最近更新 更多