Php 创建URL字符串时XML中的符号和问题
我正在使用一个XML提要,该提要的一个节点有一个类似于以下内容的URL字符串:Php 创建URL字符串时XML中的符号和问题,php,xml,url,ampersand,Php,Xml,Url,Ampersand,我正在使用一个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=134
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提要时,字符串将显示完整的&代码>
因此,实际的URL不起作用。道歉,如果这是一个非常基本的误解,但一些指导将是伟大的
我还尝试使用%26
而不是&代码>但仍然遇到相同的问题。&代码>对于XML文档中的转义符号是正确的。你所举的例子应该有用
您声明它不起作用,但是您没有说明您正在使用的应用程序,或者它以什么方式不起作用。当你点击链接时会发生什么?执行&代码>字符串是否在浏览器的URL字段中结束?如果是这样的话,这听起来像是您查看XML时使用的软件有问题。您是否尝试过在另一个应用程序中查看XML以确定问题是否一致
回答问题的最后一部分:%26
绝对不适合您——如果您的URL参数需要包含符号,您将使用此选项。例如,在aref=chris
中,如果名称chris
是一个符号(假设用户名是chris&bob
),则需要使用%26
对该符号进行转义,以便URL解析器不会将其视为启动新的URL参数
希望对您有所帮助。如果要在XML/HTML中插入内容,您应该始终使用该函数。这将把字符串转义为正确的XML语法
但是你遇到了第二个问题。
您的服务器已将第二个url添加到第一个url。
这也需要转义到url语法中。
为此,您需要使用
&代码>是正确的。如果解析器在将XML节点值转换为字符串时未对其进行解码,则解析器将被破坏,您需要修复它,而不是XML。您不应使用普通的echo
语句创建XML。相反,可以使用SimpleXML或XMLWriter:它们都会为您处理肮脏的细节。如果他对已获得的字符串使用htmlspecialchars()
代码>转义,他将得到一个双转义字符串。是的,他的示例代码不起作用。当我看到第二个附加的url时,我更正了我的示例;不再有双重逃跑。但有趣的是,我注意到您添加的urlencode()
部分:原始问题中没有指定aref=chris
是google URL的一部分,而不是主URL的另一个参数。如果是的话,那么你的答案是好的,也解释了为什么即使他逃跑了,你的答案对他也不起作用。然而,仍然存在一个问题,如果aref=chris
是谷歌URL的一部分,那么它前面需要一个问号,而不是一个符号,并且需要通过urlencode()
运行。是的,你是对的&ahref不是谷歌url的一部分。google url包含他在url中需要的任何字符。这还包括?+1。尽管如此,我还是会投票支持你,因为这里提出了一些我在回答中没有提到的好观点
<node><?php echo htmlspecialchars('http://aflite.co.uk/track/?aid=13414&mid=32532&aref=chris&dl='.urlencode('http://www.google.com/')); ?></node>