How to pass URL with parameter, as a parameter? [duplicate]

安稳与你 提交于 2019-12-10 21:05:35

问题


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


回答1:


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




回答2:


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




回答3:


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.



来源:https://stackoverflow.com/questions/24970406/how-to-pass-url-with-parameter-as-a-parameter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!