2012-04-16 102 views
0

獲得一個網址:爲什麼這個get參數不等於一個字符串?

scrape.php U =的http%3A%2F%2Fwww.coldwellbanker.com%2Fagent%3 ...等

$url = $_GET['u']; 
$url2 = 'http://www.coldwellbanker.com/agent?action=detail&agentId=121759&mode=detail'; 
var_dump($url==$url2); 

//This prints out bool(false) 

爲什麼是$ _GET參數不相同?到單引號相當於字符串?

+0

您是否曾嘗試'var_dump()'直接在'$ url'上? – 2012-04-16 03:33:35

+0

是的。這很奇怪。 $ url的var_dump給了我字符串(84)和$ url2的var_dump給了我字符串(76) – jessh 2012-04-16 03:34:57

+0

既然你得到8個字符太多(或2倍4),是否有可能你的'scrape.php?u = ... '電話正在使用'&'而不是'&'? – JScoobyCed 2012-04-16 03:45:05

回答

1

這裏就是我所做的:

由於使用網址:

http://localhost/gettest.php?u=http%3A%2F%2Fgoogle.com%3Ftest%3Dtest 

而這個腳本:

$url = $_GET['u']; 
var_dump($url); 
$url2 = "http://google.com?test=test&test1=test1"; 
var_dump($url2); 
var_dump($url == $url2); 

輸出是:

string 'http://google.com?test=test' (length=27) 
string 'http://google.com?test=test&test1=test1' (length=39) 
boolean false 

這使我相信&符號被$ _GET評估爲獨立的arg。也許你應該base64編碼你的URL以確保它能正常工作。

+0

正如所料,使用base64_encode()對您的字符串進行編碼將確保它通過$ _GET正確傳輸。 – donutdan4114 2012-04-16 03:57:32

+0

你的意思是這個URL將被base64編碼。像scrape.php?u = BASE64ENCODEDSTRING。然後我可以基64解碼結果? – jessh 2012-04-16 04:13:42

+0

是的,那會很好地工作。 – donutdan4114 2012-04-16 04:29:28

0

問題是因爲,您將它的網址,是思想的&實際參數,以您的原始腳本:

所以,如果你這樣做:

<?php echo $_GET['u'];?> 

您將返回:http://www.coldwellbanker.com/agent?action=detail49

<?php 
print_r($_GET); 
?> 

Array ([u] => http://www.coldwellbanker.com/agent?action=detail [agentId] => 121759 [mode] => detail) 

一種方法來解決它可以做類似:

<?php 
$url = end(explode('u=', $_SERVER['argv'][0])); 
$url2 = 'http://www.coldwellbanker.com/agent?action=detail&agentId=121759&mode=detail'; 
echo var_dump($url==$url2); 
?> 

回報:

bool(true) 
+1

$ _GET變量已經通過url_decode根據http://php.net/manual/en/reserved.variables.get.php – jessh 2012-04-16 03:36:56

+0

發現了問題。改變我的回答 – Menztrual 2012-04-16 03:43:44

+0

我認爲這可能是問題,但如果我print_r($ _ GET);它只是給了我[u] = http://example.com?s = 1&j = 3等。基本上我的意思是,它不拉出參數 – jessh 2012-04-16 03:48:06