Поделиться в Twitter - перенаправляет параметр urlencode% 2C на% 252C - PullRequest
2 голосов
/ 04 января 2012

Я использую кнопку общего доступа Twitter «Создай свою собственную кнопку твита» (https://dev.twitter.com/docs/tweet-button). В документации сказано, что мне нужно использовать параметры запроса для передачи параметров.

ПРОБЛЕМА: Твиттер неправильно кодирует текстовый параметр, когда я передаю ему строку в кодировке URL. Запятая (,) отображается как% 252C в сообщении твита. Другие символы также неправильно закодированы.

Я использую PHP url encode (http://php.net/manual/en/function.urlencode.php), чтобы подготовить строку для вызова.

$text = urlencode("I just backed ". $project->getTitle().", an amazing new mobile app, on appbackr, where anyone can back mobile apps");

Тогда я создаю твиттер-ссылку:

'http://www.twitter.com/share?url='.urlencode($projectUrl).'&via='.$via.'&text='.$text.'&related='.$user->getTwitterProfileName()

Последний звонок в твиттере:

http://www.twitter.com/share?url=http%3A%2F%2Flocalhost%2Fapp%2Fbig-top-ballet&via=appbackr&text=I+just+backed+Big+Top+Ballet%2C+an+amazing+new+mobile+app%2C+on+appbackr%2C+where+anyone+can+back+mobile+apps&related=philippberner

Как только страница открывается в браузере (Chrome и Firefox), твиттер перенаправляет URL-адрес на:

https://twitter.com/intent/tweet?related=philippberner&text=I+just+backed+Big+Top+Ballet%252C+an+amazing+new+mobile+app%252C+on+appbackr%252C+where+anyone+can+back+mobile+apps&url=http%253A%252F%252Flocalhost%252Fapp%252Fbig-top-ballet&via=appbackr

В окне твита отображается следующее сообщение:

Я только что поддержал Big Top Ballet% 2C - потрясающее новое мобильное приложение% 2C на appbackr% 2C, где каждый может поддержать мобильные приложения через @ appbackr

Преобразует Топ + Балет% 2C + + удивительный в Топ + Балет% 252C + в + потрясающий . Запятая отображается правильно, когда я вручную изменяю% 252C на% 2C в твиттер-URL.

Ответы [ 2 ]

2 голосов
/ 17 января 2012

На самом деле, это не имеет ничего общего с URL-кодировкой.

На самом деле работает с urlencode, rawurlencode или даже без url-кодирования. Попробуйте следующие URL при открытии новой вкладки.

С urlEncode : http://twitter.com/share?url=http%3A%2F%2Fwww.appbackr.com%2Fapp%2Fglass-ceiling&via=appbackr&text=I+just+backed+Glass+Ceiling%2C+an+amazing+new+mobile+app%2C+on+appbackr%2C+where+anyone+can+back+mobile+apps&related=

С rawurlEncode : http://twitter.com/share?url=http%3A%2F%2Fwww.appbackr.com%2Fapp%2Fglass-ceiling&via=appbackr&text=I%20just%20backed%20Glass%20Ceiling%2C%20an%20amazing%20new%20mobile%20app%2C%20on%20appbackr%2C%20where%20anyone%20can%20back%20mobile%20apps&related=

Без urlEncode : http://twitter.com/share?url=http%3A%2F%2Fwww.appbackr.com%2Fapp%2Fglass-ceiling&via=appbackr&text=I только что поддержал Glass Ceiling, потрясающее новое мобильное приложение для appbackr, где каждый может поддержать мобильные приложения и связанные с ними =

Хитрость заключается в том, чтобы использовать twitter.com вместо www.twitter.com. Не уверен, почему есть разница, и она, кажется, не документирована ни в документации твиттера, ни в результатах поиска Google. Хотя, если быть честным, документация Twitter указала на twitter.com, а не на www.twitter.com.

Как всегда, определенно рекомендуется всегда урленкодировать текст, даже если он работает без кодировки URL.

0 голосов
/ 04 января 2012

Использование:

$text = rawurlencode("I just backed ". $project->getTitle().", an amazing new mobile app, on appbackr, where anyone can back mobile apps");

Затем используйте этот URL: 'https://twitter.com/intent/tweet?url='.urlencode($projectUrl).'&via='.$via.'&text='.$text.'&related='.$user->getTwitterProfileName()

...