为什么这个get参数不等于字符串?

时间:2012-04-16 03:32:02

标签: php

给出一个网址:

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

2 个答案:

答案 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)