2

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

以下是网址:

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

这是错误:

此提要未验证。第 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 英镑

错误:

此提要未验证。第 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

4

3 回答 3

3

在将URL 发布到 RSS 之前,您需要对URL 进行 URL 编码:

var encoded = HttpUtility.UrlEncode(aUrl);

请注意,URL 不能直接用作:, /etc 也将被编码。

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

var escaped = SecurityElement.Escape(aUrl);
于 2013-01-22T10:46:36.577 回答
0

我正在为我的系统构建一个 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);
于 2013-01-22T10:43:02.633 回答
0

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

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

    另请参见PHP 中的 UTF-8 编码 xml

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

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

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

于 2013-01-22T10:54:44.640 回答