我试图将URL作为参数传递,但该URL也有参数。当然,这些参数很重要,必须进行传输和正确解释。
(是的,我知道,我可以在一个文件中单击跟踪并重定向所有内容,但在某些特定情况下,我无法做到:有时我需要传递参数为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"它适当吗?
我从未使用过这种技术,有没有人提供任何有关如何操作的示例/提示/建议?
由于
答案 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}}"样式网址)。
但是,散列本身不起作用,因为(除非映射是持久的)散列函数是单向操作,原始数据是不可恢复的。