0

给定一个网址:

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 参数与单引号中的等效字符串不同?

4

2 回答 2

1

这是我所做的:

给定一个 URL:

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 评估为一个单独的参数。也许您应该对您的 URL 进行 base64 编码以确保它能够正常工作。

于 2012-04-16T03:55:16.237 回答
0

问题是因为您传递它的 URL 认为 & 实际上是原始脚本的参数:

所以如果你这样做:

<?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)
于 2012-04-16T03:35:41.273 回答