创建URL字符串时XML中的&符号问题

Chr*_*ris 4 php xml url ampersand

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

http://aflite.co.uk/track/?aid=13414&mid=32532&dl=http://www.google.com/&aref=chris
Run Code Online (Sandbox Code Playgroud)

我知道&符号会在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>
Run Code Online (Sandbox Code Playgroud)

但是,当生成XML提要时,字符串将显示为full &amp; ,因此实际URL不起作用.如果这是一个非常基本的误解而道歉,但一些指导会很棒.

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

Ber*_*Ott 7

如果要在XML/HTML中插入内容,则应始终使用htmlspecialchars函数.这将使您的字符串转换为正确的XML语法.

但是你遇到了第二个问题.你已经为第一个添加了第二个网址.这个还需要转义为url语法.为此你需要使用urlencode.

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


Spu*_*ley 5

&amp;对于在 XML 文档中转义 & 符号是正确的。你给出的例子应该有效。

您声明它不起作用,但您没有说明您正在使用什么应用程序,或者它以什么方式不起作用。单击该链接时到底会发生什么?&amp;这些字符串最终会出现在浏览器的 URL 字段中吗?如果是这种情况,听起来您用来查看 XML 的软件有问题。您是否尝试过查看另一个应用程序中的 XML 以查看问题是否一致?

回答你的问题的最后部分:%26绝对不适合你——如果你的 URL 参数需要包含&符号,这就是你应该使用的。例如aref=chris,在 中,如果名称chris是一个 & 符号(假设用户名是chris&bob),那么需要使用该 & 符号进行转义%26,以便 URL 解析器不会将其视为启动新的 URL 参数。

希望有帮助。