Кнопка Digg отклоняет закодированный URL - PullRequest
0 голосов
/ 01 января 2011

Я написал сайт php (он все еще прототип) и поместил на него кнопку Digg. Это было легко, но ...

Официальное руководство гласит: «URL должен быть закодирован». Я сделал это с помощью urlencode (). После URL-адреса мой URL выглядит так:

http%3A%2F%2Fwww.mysite.com%2Fen%2Fredirect.php%3Fl%3Dhttp%3A%2F%2Fwww.othersite.rs%2FNews%2FWorld%2F227040%2FRusia-Airplane-crashed%26N%3DRusia%3A+Airplane+crashed

Пока это хорошо, но когда я хочу отправить этот URL в Digg, он распознается как недействительный URL:

http://www.mysite.com/en/redirect.php?l=http://www.othersite.rs/News/World/227040/Rusia-Airplane-crashed&N=Rusia:+Airplane crashed

Если поместить «+» между «Самолетом» и «разбился» (в конце ссылки), то Digg распознает его без проблем!

Пожалуйста, помогите, эта странная проблема убивает клетки моего мозга!

P.S. Для целей этого ответа URL-адреса изменены (на несуществующие), поскольку в оригинале участвуют неанглийские сайты.

1 Ответ

0 голосов
/ 01 января 2011

После того, как вы urlencode() отредактировали его, также закодируйте получившиеся знаки плюс:

$encoded_url = urlencode($original_url);
$final_url = str_replace('+', '%2B', $encoded_url);

Или же вы можете заменить пробелы в URL-адресе сначала на +, а затем urlencode() результат:

$spaceless_url = str_replace(' ', '+', $original_url);
$final_url = urlencode($spaceless_url);

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

...