当其中一个参数是URL时,$ _GET不起作用

时间:2011-12-20 14:48:06

标签: php

当页面的一个参数是url时,

$ _ GET不起作用。

外部页面(我无法控制)向我的页面显示iframe,并传递以下参数:

turkSubmitTo=http%3A%2F%2Fwww.mturk.com

当我在我的页面上我想要提取其他参数时,它会为我提供所有内容的NULL,但是当我删除“http”时它会起作用。为什么这样做,我该怎么做才能获得其他参数?

编辑: 你可以在这里自己试试:

http://www.translate.outofscopes.com/?turkSubmitTo=http%3A%2F%2Fwww.mturk.com

Array()下面有一个$ _GET的print_r,你可以尝试删除参数中的'http',它会起作用。 在localhost上它完美运行。

2 个答案:

答案 0 :(得分:2)

尝试类似的事情:

$parameters = array();
if (isset($_SERVER['QUERY_STRING'])) {
  $pairs = explode('&', $_SERVER['QUERY_STRING']);
  foreach($pairs as $pair) {
    $part = explode('=', $pair);
    $parameters[$part[0]] = urldecode($part[1]);
    }
  }

答案 1 :(得分:1)

你可以很容易地做到这一点,但你需要控制创建网址的内容。诀窍是urlencode 两次

<?

if ( array_key_exists( 'url', $_GET ) )
{
    echo $_GET['url'] . '<br>';
    echo urldecode( $_GET['url'] ) . '<br>';
}

$url = 'http://example.com/a/index.php?a=123';
$encUrl = urlencode( urlencode( $url ) );

?>
<a href="http://<?= $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?url=' . $url; ?>">Not the best</a> - I've seen this fail.
<br>
<a href="http://<?= $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?url=' . $encUrl; ?>">Much Better</a>