0

与えられたURL:

scare.php?u = http%3A%2F%2Fwww.coldwellbanker.com%2Fagent%3 ... etc

$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をbase64encodeして、確実に機能させる必要があります。

于 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 )

それを回避する1つの方法は、次のようなことを行うことです。

<?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 に答える