2011-12-20 57 views
0

当页面的其中一个参数是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”在参数中,它会工作。 在本地主机上,它完美地工作。

+0

检查请求的URL(无论是PHP函数或介于$ _ SERVER),并自己解析它。 – Robus 2011-12-20 14:49:38

+0

'print_r($ _ GET)的输出是什么;'? – pgl 2011-12-20 14:55:28

+0

你能给我一个正则表达式吗? – Vadiklk 2011-12-20 14:55:34

回答

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]); 
    } 
    } 

+0

工作过,谢谢,我会尽快回复你,没有人向我解释为什么我的问题会发生。与此同时,采取+1。 – Vadiklk 2011-12-20 15:17:13

1

你可以做到这一点,很容易地,但你需要控制什么是创造的URL。诀窍是来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>