我正在使用 Twitter 自定义共享按钮“构建您自己的推文按钮”(https://dev.twitter.com/docs/tweet-button)。 文档说我必须使用查询参数来传递参数。
问题: 当我向 Twitter 传递 URL 编码字符串时,它对文本参数的编码是错误的。逗号 (,) 在推文消息中显示为 %252C。其他字符也编码错误。
我使用 PHP url 编码(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");
然后我建立 Twitter 链接:
'http://www.twitter.com/share?url='.urlencode($projectUrl).'&via='.$via.'&text='.$text.'&related='.$user->getTwitterProfileName()
最终的 Twitter url 调用是:
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)中打开后,twitter 会将 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
这会在推文框中显示以下消息:
我刚刚在 appbackr%2C 上支持了 Big Top Ballet%2C 一个令人惊叹的新移动应用程序%2C,任何人都可以通过 @appbackr 支持移动应用程序
它将 Top+Ballet%2C+an+amazing 转换为 Top+Ballet%252C+an+amazing。当我手动将 twitter URL 中的 %252C 更改为 %2C 时,逗号显示正确。
其实和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 just backed Glass Ceiling, an amazing new mobile app, on appbackr, where anyone can back mobile apps&related=
诀窍实际上在于使用 twitter.com 而不是 www.twitter.com。不知道为什么会有差异,并且似乎没有在 Twitter 的文档或谷歌的搜索结果中的任何地方记录。公平地说,Twitter 的文档确实指向 twitter.com,而不是 www.twitter.com。
一如既往,始终对文本进行 urlencode 绝对是最佳实践,即使它无需 url 编码即可工作。
用途:
$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.'&lated='.$user->getTwitterProfileName( )