在Twitter上与查询string共享一个url

我正在尝试在电子邮件中添加Twitter分享链接。 因为这是在电子邮件中,我不能依靠JavaScript,而必须使用“build立自己的”Tweetbutton。

例如,分享到Google的链接:

<a href="http://www.twitter.com/share?url=http://www.google.com/>Tweet</a> 

这工作正常。 我遇到的问题是当URL有一个查询string。

 <a href="http://www.twitter.com/share?url=http://mysite.org/foo.htm?bar=123&baz=456">Tweet</a> 

查询string的URL会混淆Twitter的URL缩短服务t.co. 我已经尝试过以各种方式对此进行编码,并且无法获取任何内容。 我得到的最接近的是这样做。

 <a href="http://www.twitter.com/share?url=http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456">Tweet</a> 

在这里我只编码查询string。 当我这样做的时候,t.co成功地缩短了URL,但是按照缩短的链接,它会把你带到编码的URL。 我在地址栏中看到http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456 ,并在浏览器中获得以下错误

未find

在此服务器上未find请求的url/foo.htm?bar=123&baz=456。

我不知道如何解决这个问题。

编辑:回复:onteria_

我试过编码整个url。 当我这样做,没有url显示在Tweet中。

这将为你工作

 http://twitter.com/share?text=text goes here&url=http://url goes here&hashtags=hashtag1,hashtag2,hashtag3 

这是一个关于它的现场示例


http://twitter.com/share?text=Im在Twitter上分享&URL = https://stackoverflow.com/users/2943186/youssef-subehi&hashtags=stackoverflow,example,youssefusf

这可以通过使用https://twitter.com/intent/tweet而不是http://www.twitter.com/share来解决。 使用intent/tweetfunction,您只需对整个url进行url编码,就像魅力一样。

https://dev.twitter.com/web/intents

使用推特networking意图,这是简单的链接:

 https://twitter.com/intent/tweet?url=<?=urlencode($url)?> 

更多的variables在https://dev.twitter.com/web/tweet-button/web-intent

你不一定需要使用意图,它编码你的url,它也将与twitter共享。

如@onteria_提到的,你需要编码整个参数。 对于面临相同问题的其他人,您可以使用以下小书签生成正确编码的url。 复制粘贴到您的浏览器的地址栏来创buildTwitter分享url 。 确保当您将javascript:前缀复制到地址栏中时,Google Chrome会在复制时将其删除。

 javascript:(function(){var url=prompt("Enter the url to share");if(url)prompt("Share the following url - ","http://www.twitter.com/share?url="+encodeURIComponent(url))})(); 

JS小提琴的来源http://jsfiddle.net/2frkV/

Twitter现在允许您通过数据属性发送URL。 这对我很好:

 <a href="javascript:;" class="twitter-share-button" data-lang="en" data-text="check out link b" data-url="http://www.lyricvideos.org/tracks?videoURL=SX05JZ4FisE">Tweet</a> 

您必须将您的url中的查询string更改为%26

看看这个: https : //dev.twitter.com/discussions/8616