$ _GET PHP和&

问题描述:

我有一个问题。我做了一个PHP代理使用此代码从外部服务器获取JSON数据:

<?php 
$url = $_GET['url']; 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$url); 
$data = curl_exec($ch); 
curl_close($ch); 

echo("<h1>".$url."</h1>"); 

echo (substr($data,0,-1)); 

?> 

但我要通过这个链接“http://isohunt.com/js/json.php?ihq=ubuntu &排序=年龄“,因为我有一个&在那里我的PHP脚本无法正确评估链接。我如何解决这个问题?

+0

可能重复[如何在JavaScript中的URL编码?](http://*.com/questions/332872/how-to-encode-a-url-in-javascript) – hakre 2012-02-24 20:43:28

在通过url GET参数将目标URL传递给脚本之前,使用urlencode()(或取决于目标URL进入情况的等效项)对其进行编码。

当您检索$_GET['url']时,编码将自动反转,并将原始(需要的)URL留给您。 (荣誉Quentin在这里纠正我)。

希望这会有所帮助。

+1

' $ _GET'会自动解码URL(这很重要)。问题在于它们不是首先被编码的! – Quentin 2012-02-24 20:29:20

+0

@Quentin谢谢 - 啤酒和*不要混用。这就像现在10带编辑下的东西:$ ... – jstephenson 2012-02-24 20:35:28

使用urlencode来生成链接,例如,

echo '<a href="http://example.com/my-script.php?url="'; 
echo url_encode($url); 
echo '">click here</a>'; 

这应该输出

<a href="http://example.com/my-script.php?url=http%3A%2F%2Fisohunt.com%2Fjs%2Fjson.php%3Fihq%3Dubuntu%26sort%3Dage">click here</a> 

想必当你在你的数据在URI的特殊含义的字符(如&)你无法对其进行编码(如%26针对特定字符) 。

由于您在为此标记jquery-ajax:请停止手动构建您的URI。让jQuery做到这一点:

$.ajax({ 
    url: "myProxy.php", 
    data: { 
    url: "http://isohunt.com/js/json.php?ihq=ubuntu&sort=age" 
    }, 
    success: function(){ 
    // yada yada 
    } 
}); 
+0

谢谢,它的作品很棒 – DxW 2012-02-28 03:02:37

在将url传递给url参数之前尝试进行URL编码。如果你想快速使用下面提到的链接。

http://meyerweb.com/eric/tools/dencoder/