当尝试将URL与变量连接时,它不会在php curl中给出预期的结果

时间:2018-02-14 10:19:23

标签: php curl

我尝试使用php中的curl读取XML文档并将内容转换为JSON。 在这里,我想将URL与变量连接起来。

但是当添加变量时,它会检索null。但当我硬编码文本时,它的工作原理。

这是我的代码。

       $city = "paris";
       $url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text=%22{$city}%22)";
        print_r($url);
       // $url ="https://www.w3schools.com/xml/plant_catalog.xml";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);    // get the url contents

        $data = curl_exec($ch); // execute curl request
        curl_close($ch);

        $xml = simplexml_load_string($data);
        echo json_encode($xml);

这是我的网址

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text=%22{$city}%22)

当我添加" paris"而不是{$ city}

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

您需要解码网址并连接并编码网址,如:

$city = "paris";
$url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text=%22{$city}%22)";
$url1 = urldecode($url);
print_r(urlencode($url1));

顺便说一句,我在我的localhost中测试你的代码,它显示我正确的输出屏幕截图是: enter image description here

答案 1 :(得分:0)

在这里还有另一个问题。 URL与变量正确连接。

但事情是我通过POST方法对变量赋值。当通过POST方法发送测试时,它最后包含新行。因为当我向urs添加变量时,它分为2部分。

我通过" trim"解决了这个问题。方法

$city = trim(preg_replace('/\s\s+/', ' ', $_REQUEST['city']));

使用时就可以了。