PHP редирект и строка запроса - PullRequest
0 голосов
/ 29 мая 2010

У меня есть сценарий

    <?php
$to = $_GET["to"];

header("Location: $to");
?> 

если я назову скрипт такой

out.php?to=http://site.ru/page.php?param1=1&param2=2

в параметре $ будет только http://site.ru/page.php?param1=1&

как исправить? я хочу это $to = http://site.ru/page.php?param1=1&param2=2

Ответы [ 7 ]

2 голосов
/ 29 мая 2010

Вы можете скрыть URL-адрес на сайте, звонящий out.php:

<a href="out.php?to=<?PHP echo htmlspecialchars(urlencode($to)); ?>">Go to $to</a>
1 голос
/ 29 мая 2010

& является зарезервированным символом в URI . Когда вы получаете доступ к этому URL, &param2=2 интерпретируется как принадлежащий текущему URL, а не со значением to.
Если вы хотите передать его буквально, вы должны кодировать это с помощью %26:

http://site.ru/page.php?param1=1%26param2=2

Большинство языков программирования предоставляют функцию для этого. (например, JavaScript , PHP ). Лучше всего закодировать весь URL.

0 голосов
/ 29 мая 2010

Я столкнулся с той же проблемой раньше, вот что я сделал:

$arr=explode('?to=',$_SERVER['REQUEST_URI'],2);
$new_to=$arr[1];

Теперь вы можете использовать переменную $ new_to. Конечно, если вы используете это для производственной среды, я бы порекомендовал кодировать URL, как советовали другие ответы. Я использовал его для тестирования скрипта curl. получение переменной таким образом имеет много недостатков, так что будьте осторожны.

0 голосов
/ 29 мая 2010

Вы можете использовать функцию под названием "html_entity_decode"

Нажмите здесь для получения дополнительной информации об этой функции

или используйте функцию md5 , чтобы зашифровать URL-адрес и затем расшифровать его, когда вы поместите его в переменную.

Надеюсь, это поможет вам

0 голосов
/ 29 мая 2010

urlencode это

urlencode($to)
0 голосов
/ 29 мая 2010

попробуйте кодировать URL-адрес to в base64, а затем в примере, который вы показали, расшифруйте его, прежде чем передать его в заголовок :)

0 голосов
/ 29 мая 2010

$ to должно быть urlencoded , но учтите, что вы даете скрипт перенаправления любому, поэтому любой фишер может его использовать. Так что было бы лучше хранить URL в базе данных и передавать только идентификатор.

...