给出一个网址:
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 :(得分: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。也许你应该对你的URL进行base64encode以确保它能够正常工作。
答案 1 :(得分: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)