Передать сложный URL как параметр в PHP - PullRequest
10 голосов
/ 05 мая 2011

Я пытаюсь передать сложный URL-адрес в качестве параметра URL-адреса, но проблема возникает, если URL-адрес содержит & например, я хочу передать следующую ссылку в качестве параметра

http://www.google.ps/search?hl=en&client=firefox-a&hs=42F&rls=org.mozilla%3Aen-US%3Aofficial&q=The+type+%27Microsoft.Practices.ObjectBuilder.Locator%27+is+defined+in+an+assembly+that+is+not+referenced.+You+must+add+a+reference+to+assembly+&aq=f&aqi=&aql=&oq=

Я пытаюсь получить URL как параметр от пользователя и перенаправить пользователя на этот URL.

Как я могу справиться с этим в PHP?


Вся история:

Я пытаюсь сделать аналитику рекламы для файлов флэш-памяти, чтобы пользователь отправлял рекламу на веб-сайте, содержащем ссылку на требуемую веб-страницу.

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

http://myclientwebpage.com/disp.php?link=www.google.com&id=16

таким образом я могу обновить свою базу данных и подсчитать, сколько раз была нажата эта ссылка

Ответы [ 2 ]

15 голосов
/ 05 мая 2011

Используйте urlencode() или rawurlencode().


Вы писали:

Я пытаюсь получить URL в качестве параметра от пользователя и перенаправить пользователя к этому URL.

Но вы не ответили на вопрос - как вы получили этот URL? Как пользователь предоставляет вам это? Это написано в <input type='text'/>? Или пользователь нажимает какую-то ссылку, которая содержит URL в качестве одного из параметров? Или передается как идентификатор некоторого URL, который хранится в БД?

Один случай, который мне приходит в голову - замена URL-адресов в виде обычного текста и отправка пользователя на какую-то «страницу перенаправления» перед открытием реальной страницы, поэтому на последней странице не отображается реферер HTTP, который может содержать некоторые защищенные данные (например, идентификатор сеанса) , В этом случае вы должны написать

<a href='redirect.php?link=<?php echo rawurlencode($url); ?>'>
    <?php echo htmlspecialchars($url); ?>
</a>

вместо

<a href='redirect.php?link=<?php echo $url; ?>'>
    <?php echo htmlspecialchars($url); ?>
</a>
0 голосов
/ 05 мая 2011

Насколько я понимаю, вам нужно заменить & на &amp;.

$url = str_replace('&', '&amp;', $url);

& зарезервировано, используется для разделения параметров GET, &amp; для записи буквального амперсанда в URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...