Я пытаюсь передать URL как параметр, но этот URL также имеет параметры. Конечно, эти параметры важны и должны быть переданы и правильно интерпретированы.
Например: http://example.com/myclicktrackingscript.php?source=sidebar&url=http://example.com/redirect_to.php?site=site1
(да, я знаю, я мог щелкнуть трек и перенаправить все сразу в один файл, но в некоторых конкретных ситуациях я просто не могу: иногда мне нужно передать любой URL с параметрами AS-параметр)
До сих пор я использовал переписывание URL: http://example.com/redirect_to.php?site=site1 => http://example.com/redirect/site1/
.. но это не очень удобно (слишком много конкретных ситуаций, когда мне нужно больше гибкости)
Есть ли лучший способ сделать это?
Мое предположение, возможно, связано с URL-адресом параметра:
Например: http://example.com/myclicktrackingscript.php?source=sidebar $ url = REJREJ12333232rerereE
… но как правильно «дешить» его?
Я никогда не использовал такую технику, есть ли какие-либо примеры / советы / советы о том, как это сделать?
благодаря
Вы должны просто кодировать параметр:
urlencode('http://example.com/redirect_to.php?site=site1')
И закодированное значение будет: http%3A%2F%2Fexample.com%2Fredirect_to.php%3Fsite%3Dsite1
вы можете использовать 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;
см. Демо
Хотя urlencode
будет работать, это также приводит к беспорядочному (смотри, IMOHO) выводу для этой задачи по умолчанию. Однако его можно очистить!
Это связано с тем, что в строке запроса допускаются некоторые «специальные символы» , поэтому мы можем исправить перекодировку, чтобы она выглядела красивее.
$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.
Это работает, когда $ encoded используется в части запроса URI.
$url = "http://blah/?url=$encoded";
И должен привести к довольно читаемому URL-адресу, как показано ниже. Обратите внимание, что & во внедренном URL-адресе все еще закодировано, так как оно обозначает завершение между парами значений.
http://blah/?url=http://target.com/foo_bar.php?a=1%26b=2
В тех случаях, когда человеческая читаемость нежелательна, существуют также такие подходы, как base64-кодирование URL-адреса (который все равно должен быть сделан с URI-безопасностью ) или с использованием бэкэнд для предоставления услуги URL-shortener (что позволит « http: // blah. com /? afjnD ").
Однако хеширование само по себе не будет работать, потому что (если отображение не сохраняется) хеш-функция является односторонней, а исходные данные не восстанавливаются.