如何使用参数传递URL作为参数?

时间:2014-07-26 11:12:33

标签: php get

我试图将URL作为参数传递,但该URL也有参数。当然,这些参数很重要,必须进行传输和正确解释。

例如: http://example.com/myclicktrackingscript.php?source=sidebar&url=http://example.com/redirect_to.php?site=site1

(是的,我知道,我可以在一个文件中单击跟踪并重定向所有内容,但在某些特定情况下,我无法做到:有时我需要传递参数为AS参数的任何URL)

到目前为止,我已经使用了URL重写: http://example.com/redirect_to.php?site=site1 => http://example.com/redirect/site1/

..但这不太方便(太多需要更多灵活性的具体情况)

有更好的方法吗?

我的猜测可能是散列参数URL:

例如:http://example.com/myclicktrackingscript.php?source=sidebar $ url = REJREJ12333232rerereE

...但是如何" dehash"它适当吗?

我从未使用过这种技术,有没有人提供任何有关如何操作的示例/提示/建议?

由于

3 个答案:

答案 0 :(得分:5)

你应该只编码参数:

urlencode('http://example.com/redirect_to.php?site=site1')

编码值为:http%3A%2F%2Fexample.com%2Fredirect_to.php%3Fsite%3Dsite1

答案 1 :(得分:1)

您可以使用urlencode

 $parmeter_url = "http://example.com/redirect_to.php?site=site1";
 $parmeter_url = urlencode($parmeter_url);
 $url = "http://example.com/myclicktrackingscript.php?source=sidebar&url=".$parmeter_url;
 echo $url;

参见 Demo

答案 2 :(得分:1)

虽然urlencode可以正常工作,但默认情况下也会导致此任务的凌乱(外观,IMOHO)输出。但是,它可以清理!

这是因为some "special characters" are allowed in a query string,因此我们可以修复过度编码,使其看起来更漂亮。

$encoded = urlencode('http://target.com/foo_bar.php?a=1&b=2');
// Remove unneeded encoding
$encoded = str_replace('%3A', ':', $encoded);
$encoded = str_replace('%2F', '/', $encoded);
$encoded = str_replace('%3F', '?', $encoded);
$encoded = str_replace('%3D', '=', $encoded);
// There are several additional characters that need not be encoded in
// the query string; refer to the link.

当在URI的查询部分中使用 $ encoded时,

$url = "http://blah/?url=$encoded";

并且应该产生如下可读的URL。请注意&在嵌入的URL中仍然编码,因为它表示值对之间的终止。

http://blah/?url=http://target.com/foo_bar.php?a=1%26b=2

在不需要人类可读性的情况下,还有一些方法,例如base64编码URL(must still be made URI-safe)或使用后端提供URL缩短服务(这将允许" {{ 3}}"样式网址)。

但是,散列本身不起作用,因为(除非映射是持久的)散列函数是单向操作,原始数据是不可恢复的。