创建URL字符串时XML中的安培和问题


Ampersand problem in XML when creating a URL String

我正在使用一个XML提要,该提要作为其节点之一,有一个类似于以下内容的URL字符串:

http://aflite.co.uk/track/?aid=13414&mid=32532&dl=http://www.google.com/&aref=chris

我知道与号在XML中会引起很多问题,应该使用&而不是裸&进行转义。因此,我将php改为如下:

<node><?php echo ('http://aflite.co.uk/track/?aid=13414&amp;mid=32532&amp;dl=http://www.google.com/&amp;aref=chris'); ?></node>

但是,当生成XML提要时,字符串将显示完整的&amp;因此实际的URL不起作用。如果这是一个非常基本的误解,我们深表歉意,但一些指导会很好。

我也尝试过使用%26而不是&amp;,但仍然遇到同样的问题。

如果要在XML/HTML中插入某些内容,则应始终使用htmlspecialchar函数。这将把字符串转义为正确的XML语法。

但是你遇到了第二个问题。您已经在第一个url上添加了第二个url。这种需要也转换为url语法。为此,您需要使用urlencode。

<node><?php echo htmlspecialchars('http://aflite.co.uk/track/?aid=13414&mid=32532&aref=chris&dl='.urlencode('http://www.google.com/')); ?></node>

&amp;对于转义XML文档中的符号是正确的。你举的例子应该行得通。

你说它不起作用,但你没有说明你正在使用什么应用程序,或者它以什么方式不起作用。当你点击链接时,会发生什么?&amp;字符串是否最终出现在浏览器的URL字段中?如果是这样的话,这听起来像是查看XML的软件出现了故障。您是否尝试过查看另一个应用程序中的XML,看看问题是否一致?

为了回答问题的最后一部分:%26肯定不适合你——如果你的URL参数需要包含"与"符号,你会使用它。例如,在aref=chris中,如果名称chris是与号(假设用户名是chris&bob),则需要使用%26转义该与号,这样URL解析器就不会将其视为启动新的URL参数。

希望能有所帮助。