Twitter 分享 - 将 urlencode 参数 %2C 重定向到 %252C

问题描述 投票:0回答:2

我正在使用 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 时,逗号显示正确。

twitter urlencode
2个回答
3
投票

其实和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 编码即可工作。


0
投票

用途:

$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( )

© www.soinside.com 2019 - 2024. All rights reserved.