使用以下字符 £ ' – 的 XML 无效
本文关键字:XML 无效 字符 | 更新日期: 2023-09-27 17:55:26
我正在尝试创建一个将使用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---为什么皇家邮件是撕裂你 [帮助]... --为什么皇家邮件正在撕毁你
我尝试用转义字符替换符号,但这不起作用。以下是我一直使用的转义字符:
Text = Text.Replace("-", "-");
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 [帮助]... -销售-3床-独立-伦敦-家-£15,000
RSS 中发布 URL 之前,您需要对 URL 进行 URL 编码:
var encoded = HttpUtility.UrlEncode(aUrl);
请注意,URL将不能直接使用,因为:
,/
等也会被编码。
如果希望这些值是有效的 XML,请改用SecurityElement.Escape
。
var escaped = SecurityElement.Escape(aUrl);
我正在为我的系统构建一个 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);
答案是使用 UTF-8 编码或将非 ASCII 字符转换为 XML 实体。
- UTF-8
编码:确保文档以 UTF-8 格式输出,并包含相关的编码标头。
另请参阅 PHP 中的 UTF-8 编码 xml
实体编码:将所有非 ASCII 字符转换为 XML 实体。
XML 实体如下所示:
£
(该实体用于£
符号)。大多数编程语言将在您生成 XML 文档时自动执行此操作,或者提供用于执行此操作的标准函数。您没有指定所使用的语言,但上述内容应该可以帮助您找到合适的 API 函数。
您不应该做的一件事是手动生成 XML 数据(即输出标记和属性,作为字符串),或手动替换实体的字符串。您应该为其使用正确的 API。手动生成XML(或任何其他标准数据格式)总是可能以这样的问题告终,如果工具就在您面前以正确的方式执行此操作似乎有点疯狂。