How to pass URL with parameter, as a parameter? [d

2019-07-21 05:12发布

This question already has an answer here:

I'm trying to pass a URL as a parameter, but that URL also has parameters. Of course these parameters are important and must be transmitted and properly interpreted.

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

(yes I know, I could click track and redirect all at once in one file, but in some specific situations, I just can't : sometimes I need to pass whatever URL with parameters AS a parameter)

So far i've used URL rewriting : http://example.com/redirect_to.php?site=site1 => http://example.com/redirect/site1/

.. but that's not very handy (too many specific situations where I need more flexibility)

Is there a better way to do that ?

My guess is maybe hashing the parameter URL :

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

... but how to "dehash" it properly ?

I've never used such technique, has anyone any examples / tips / advice about how to do so ?

Thanks

标签: php get
3条回答
该账号已被封号
2楼-- · 2019-07-21 06:09

While urlencode will work, it is also results in messy (looking, IMOHO) output for this task by default. However, it can be cleaned up!

This is because some "special characters" are allowed in a query string, thus we can fix the over-encoding to make it look prettier.

$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.

This works when $encoded is used in the query portion of the URI.

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

And should result in a fairly-readable URL like the following. Note the & in the embedded URL is still encoded as it denotes termination between value pairs.

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

Where human readability is not desired there are also approaches such as base64-encoding the the URL (which must still be made URI-safe) or using a backend to provide a URL-shortener service (which would allow "http://blah.com/?afjnD" style URLs).

However, hashing by itself will not work because (unless the mapping is persisted) the hash function is a one-way operation and the original data is not recoverable.

查看更多
劳资没心,怎么记你
3楼-- · 2019-07-21 06:16

You should just encode parameter:

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

And encoded value will be: http%3A%2F%2Fexample.com%2Fredirect_to.php%3Fsite%3Dsite1

查看更多
甜甜的少女心
4楼-- · 2019-07-21 06:17

you can use 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;

see Demo

查看更多
登录 后发表回答