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

当尝试将URL与变量连接在一起时,它不会在php curl中给出预期的结果,php,curl,Php,Curl,我尝试读取XML文档,并在php中使用curl将内容转换为JSON。 在这里,我想用变量连接URL 但当添加变量时,它检索空值。但当我硬编码文本时,它就起作用了 这是我的密码 $city = "paris"; $url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20f

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

但当添加变量时,它检索空值。但当我硬编码文本时,它就起作用了

这是我的密码

       $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}时,它会起作用


请帮我解决这个问题

您需要对url进行解码,并对url进行连接和编码,如下所示:

$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));
顺便说一下,我在本地主机中测试代码时,它向我显示了正确的输出屏幕截图:
这里还有另一个问题。URL与变量正确连接

但问题是我通过POST方法将值转换为变量。当通过POST方法发送测试时,它最后包含新行。正因为如此,当我向urs添加变量时,它被分成两部分

我用“修剪”的方法解决了它


当这样使用时,它会起作用。

如果我打印url,我会像
https://query.yahooapis.com/v1/public/yql?q=select%20*%20来自%20天气预报%20其中%20天气ID%20在%20中(从%20地理位置(1)%20其中%20文本=%22巴黎%22中选择%20天气ID%20)
@Nawin也为我工作
https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(从%20geo.places(1)%20where%20text=%22paris%22中选择%20woeid%20)
,它工作正常。是的,它打印正确的URl。但结果并不像我预期的那样。json对象检索“false”我发现了问题。字符串变量最后包含新行。因此,它会影响URL。它分为两部分。我用这个$城市=修剪(preg_replace('/\s\s+/','',$请求['city']);
$city = trim(preg_replace('/\s\s+/', ' ', $_REQUEST['city']));