2012-04-07 33 views
1

我做的URL進行文件的file_get_contents做汽車url_decode

file_get_contents('https://xyz.com/login.php?app_data=%7B%22page%22%3A%22details%22%2C%22id%22%3A%2273%22%2C%22crp%22%3A%221%22%2C%22cip%22%3A%22%22%7D'); 

如下因素,但我在另一端接收它作爲

app_data={"page":"details","id":"73","crp":"1","cip":""} 

,而不是

app_data=%7B%22page%22%3A%22details%22%2C%22id%22%3A%2273%22%2C%22crp%22%3A%221%22%2C%22cip%22%3A%22%22%7D' 

另一端的代碼:

if(isset($_GET['url'])) 
{ 
    log($_GET['url']); 
} 

log只寫入文件。

回答:沒有,但$_GET確實

+0

你是如何接收它的?用'$ _GET ['app_data']'? – 2012-04-07 10:32:22

回答

1

按文檔的$_GET

注:

GET變量通過urldecode()傳遞。

這適用於鍵和值(後者是什麼導致你的困惑)。爲了得到你想要的結果,你要麼需要雙編碼在客戶端上(這是一個非常醜陋的解決方法):

$appdata = urlencode(urlencode('{"page":"details","id":"73","crp":"1","cip":""}')); 
file_get_contents("https://xyz.com/login.php?app_data=$appdata"); 

或者只是做正確和後處理在服務器端的字符串:

// $app_data will contain the nice, unescaped form 
$app_data = $_GET['app_data'] 

// later if we need to pass $app_data in another request, 
// we explicitly encode it again. 
$app_data_encoded = urlencoded($app_data); 
+0

好吧,基本上我認爲我們同意;有兩種方法可以使OP工作:或者在呼叫者處使用DOUBLE-'urlencode'字符串,或者在呼叫者中將其編碼爲一次,並在接收器中將其編碼爲一次。 – 2012-04-07 10:51:23

+0

@ Dr.Kameleon:是的。我想要清理關於實際發生解碼的*的混淆。 Web服務器不*解碼它們,'file_get_contents'也不解碼! – 2012-04-07 10:52:48

0

您可以使用urlencode返回編碼形式。

$result = urlencode($app_data); 
echo $result; 
+0

這也可以工作... – 2012-04-07 10:46:28

1

解決方案A:

編碼您appdata兩次來電腳本

// Caller script 
$appdata = '"page":"details","id":"73","crp":"1","cip":""'; 
$appdata = urlencode(urlencode($appdata)); 

file_get_contents("https://xyz.com/login.php?app_data=$appdata"); 

解決方案B:

編碼您appdata一旦調用者腳本,一旦在接收器腳本

// Caller script 
$appdata = '"page":"details","id":"73","crp":"1","cip":""'; 
$appdata = urlencode($appdata); 

file_get_contents("https://xyz.com/login.php?app_data=$appdata"); 

// Receiver script 
$appdata = urlencode($_GET['app_data']); 

什麼,你會得到的是你所期望的...... ;-)

+0

我已經urlencoding它 – aWebDeveloper 2012-04-07 10:40:45

+0

@Web開發者:他URL編碼*兩次*。 – 2012-04-07 10:41:03

+0

taht's在應用數據中添加一個「」「 – aWebDeveloper 2012-04-07 10:41:42