C# XML使用以下字符无效£;`–;

C# XML使用以下字符无效£;`–;,c#,xml,xml-validation,C#,Xml,Xml Validation,我正在尝试创建一个RSS提要,它将使用W3C验证器进行验证。 我不断从包含字符、`或- 以下是网址: http://www.example.co.uk/news/2012/april/stamp-rationing-–-why-the-royal-mail-are-ripping-you-off 以下是错误: 此提要未验证。 第14行,第119列:链接必须是完整有效的URL:––为什么英国皇家邮政会欺骗你[帮助] ... –-为什么英国皇家邮政会把你撕了 我尝试过用转义字符替换符号,但这不起作

我正在尝试创建一个RSS提要,它将使用W3C验证器进行验证。 我不断从包含字符
`
-

以下是网址:

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

此提要未验证。 第14行,第119列:链接必须是完整有效的URL:––为什么英国皇家邮政会欺骗你[帮助] ... –-为什么英国皇家邮政会把你撕了

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

 Text = Text.Replace("-", "&#45");
            Text = Text.Replace("£", "%C2%A");
            Text = Text.Replace("`", "%60");
            Text = Text.Replace("’", "%60");  
有人知道如何解决这个问题吗?以下是导致我出现问题的更多链接:

15000英镑

错误:

此提要未验证。 第14行第106列:链接必须是完整有效的URL:15000英镑[帮助]
... -sale-3-bed-detached-london-home-15000英镑

我正在为我的系统构建一个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);
在将URL发布到RSS中之前,您将需要:

var encoded = HttpUtility.UrlEncode(aUrl);
请注意,URL将不能直接使用,因为
/
等也将被编码

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


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

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

    另见

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

    XML实体如下所示:
    £(那一个表示
    符号)。大多数编程语言要么在生成XML文档时自动执行此操作,要么提供执行此操作的标准函数。您没有指定正在使用的语言,但是上面的内容应该可以帮助您找到合适的API函数


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

您好,这看起来很棒,但不幸的是,我不是用PHP开发的,我使用C#作为preg#u replace部件,我想你可以用它做点什么:;对于htmlentities,您可能希望检查以下内容:)破折号应该可以-您确定这些是导致问题的原因吗?
var escaped = SecurityElement.Escape(aUrl);