Можно ли urlencode URL-адрес, который содержит URL-адрес в кодировке? - PullRequest
5 голосов
/ 12 марта 2010

У меня есть сайт, который использует Facebook, Twitter, вкусные ссылки. Они содержат URL-адрес веб-сайта в кодировке, которым вы хотите поделиться. Проблема в том, что я хочу отправить страницу facebook / twitter / вкусный URL через страницу перенаправления php.

Будет ли работать кодирование URL-адреса в кодированном URL-адресе? Будут ли побочные эффекты?

Чтобы упростить мой вопрос:

www.website.com/redirect.php?url=" URLENCODED (http://www.facbook.com/sharer.php?t='URLENCODED(title)'&u='URLENCODED(http://www.hotel.com)')

Ответы [ 5 ]

9 голосов
/ 12 марта 2010

Вы можете кодировать строку несколько раз с помощью процентного кодирования и получить исходное значение, расшифровав его столько раз:

$str = implode(range("\x00", "\xFF"));
var_dump($str === urldecode(urldecode(urldecode(urlencode(urlencode(urlencode($str)))))));

Здесь значение $str кодируется три раза, а затем декодируется три раза. Выходные данные этого повторного кодирования и декодирования идентичны значению $str.

Так попробуйте это:

'http://example.com/redirect.php?url='.urlencode('http://www.facbook.com/sharer.php?t='.urlencode('title').'&u='.urlencode('http://www.hotel.com'))
3 голосов
/ 12 марта 2010

Вы должны иметь возможность рекурсивно кодировать URL столько раз, сколько захотите. Если вы закодируете символ как / несколько раз, вы получите:

0: /
1: %3F
2: %%3F
3: %%%%3F

и т.д.

1 голос
/ 12 марта 2010

Все в порядке, чтобы добавить второй слой URLEncoding. Идея URLEncoding состоит в том, чтобы предотвратить неправильное толкование сервером любых специальных символов, которые могут присутствовать в текстовой строке. Однако принимающий сценарий должен ожидать дополнительный слой urlencode () и действовать соответственно.

Или, если вы знаете, что строка была закодирована, вы не могли бы просто передать ее как есть? Дальнейшее кодирование не требуется.

0 голосов
/ 12 марта 2010

Как уже упоминалось ранее, вы можете кодировать URL-адреса столько раз, сколько захотите, но вы должны знать, что чем больше раз вы кодируете данные URL-адресов, тем больше их длина может увеличиться в два раза. что будет раздражать пользователей, если это будет слишком долго. также может быть ограничение на длину URL в некоторых браузерах. Также на стороне сервера будет служебная кодировка и декодирование данных. Короче говоря, вы должны быть уверены, что вам это нужно, прежде чем кодировать / декодировать несколько раз.

0 голосов
/ 12 марта 2010

Или просто urldecode заголовка и URL, затем urlencode всей строки.

...