将XML中的URL特殊字符传递给curl

时间:2013-01-21 14:35:24

标签: php xml curl

我有一个带有url变量的XML文件,其中包含特殊字符,例如&,= etc

我有两个问题:

一个。由于XML中不允许使用特殊字符,我应该如何输入URL?我应该编码网址然后放入XML文件吗?

B中。假设我编码url并将其放在XML文件中,然后在php脚本中读取。

$fxml = simplexml_load_file("mylist.xml");
$fxml -> getName();

foreach($fxml->children() as $mylist)
    {
        $url = $mylist -> url;
        $url = urldecode(url);
        echo $url;

        $feed = curl_init( $url );
        curl_setopt($feed, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($feed, CURLOPT_HEADER, 0);
        $xml = simplexml_load_string(curl_exec($feed));

        curl_close($feed);
        //---------------------
        //---------------------
 }

以下是示例XML文件:

<?xml version="1.0" encoding="UTF-8"?>
    <feed>
        <mylist>
            <name>                                                                                                                                                                                    
             SISC                                                                                                                                                                                    
            </name>
            <url>                                                                                                                                                                                     
             http://epubs.siam.org/action/showFeed?ui=0&amp;mi=3chvf9&amp;ai=s0&amp;jc=sjnaam&amp;type=etoc&amp;feed=rss                                                                               
            </url>
        </mylist>
    </feed>

请注意,我已将编码后的网址替换为原始&amp;被其代码取代。我也尝试过不使用urldecode,但我只能正确地获得echo $ url。

如果我将curl_init($ url)中的网址粘贴到单引号下,则可以使用。

但是当我对url进行编码并将其放入XML并进行解码并将其放入curl_init($ url)时,它就不起作用了。

当我回显解码的$ url(见上文)时,我会显示正确的url列表。我究竟做错了什么 ? 我仔细阅读了相关的帖子,但无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

为了举例,让我们使用&

如果您想在URL的数据中使用&(而不是指示新查询字符串键/对的开头)。然后,在将其添加到URL之前,您需要对其进行URL编码(%26)。

如果您想在XML文档的数据中使用&(例如,如果数据是带有查询字符串的URL),那么您需要对其进行XML编码(如&amp;)。您应该使用XML库构建XML(而不是字符串抨击或模板化),库将为您处理它。

在将XML用作网址之前,您应该必须使用urldecode数据。