Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建URL字符串时XML中的符号和问题_Php_Xml_Url_Ampersand - Fatal编程技术网

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

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

我正在使用一个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提要时,字符串将显示完整的
&
因此,实际的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>