我正在处理一个XML Feed,它作为其中一个节点,具有类似于以下内容的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&mid=32532&dl=http://www.google.com/&aref=chris'); ?></node>
但是,当生成XML Feed时,字符串会显示为完整&
所以实际的URL不起作用。如果这是一个非常基本的误解,我会道歉,但一些指导会很棒。
我也尝试使用%26
代替&
,但仍然遇到同样的问题。
答案 0 :(得分: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>
答案 1 :(得分:4)
&
对于转义XML文档中的&符号是正确的。你给出的例子应该有效。
您声明它不起作用,但您没有说明您正在使用的应用程序,或者它不起作用的方式。单击链接时到底发生了什么? &
字符串最终会出现在浏览器的URL字段中吗?如果是这种情况,这听起来就像您查看XML的软件一样。您是否尝试在另一个应用程序中查看XML以查看问题是否一致?
要回答问题的最后部分:%26
肯定不适合您 - 如果您的网址参数需要包含&符号,那就是您要使用的内容。例如在aref=chris
中说,如果名称chris
是&符号(假设用户名是chris&bob
),则需要使用%26
对&符号进行转义, URL解析器没有将其视为启动新的URL参数。
希望有所帮助。