在 Twitter 上使用查询字符串共享 URL

我想在电子邮件里加个推特分享链接。因为这是在一个电子邮件中,我不能依赖 JavaScript,必须使用“建立自己的”Tweet 按钮。

例如,分享一个到谷歌的链接:

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

这个工作很好。我遇到的问题是当 URL 有一个查询字符串时。

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

带有查询字符串的 URL 混淆了 Twitter 的 URL 缩短服务 t.co。我用各种方法尝试了 URL 编码,但是没有任何效果。我离成功最近的一次就是这么做的。

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

这里我只对查询字符串进行了编码。当我这样做时,t.co 成功地缩短了 URL,但是在跟随缩短的链接后,它会将您带到已编码的 URL。我在地址栏中看到 http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456,并在浏览器中得到以下错误

没找到

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

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

编辑: Re: onteria _

我已经尝试编码整个 URL。当我这样做的时候,没有 URL 显示在 Tweet。

311204 次浏览

这可以通过使用 https://twitter.com/intent/tweet代替 http://www.twitter.com/share来解决。使用 intent/tweet函数,您只需对整个 URL 进行 URL 编码,它就能像魔法一样工作。

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

你不一定需要使用意图,如果你编码你的网址,它将与 Twitter 共享以及工作。

这对你有用

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

正如@oneria _ 提到的,您需要对整个参数进行编码。对于其他面临同样问题的人,可以使用下面的 bookmarklet 生成正确编码的 URL。将其复制粘贴到浏览器的地址栏中以创建 Twitter 分享网址。确保 javascript:前缀在你复制到地址栏时,谷歌浏览器在复制时删除它。

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 Fiddle 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 更改 & 为% 26

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

使用 tweet 网页意图,这是一个简单的链接:

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

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

你可以使用以下功能:

 function shareOnFB(){
var url = "https://www.facebook.com/sharer/sharer.php?u=https://yoururl.com&t=your message";
window.open(url, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600');
return false;
}




function shareOntwitter(){
var url = 'https://twitter.com/intent/tweet?url=URL_HERE&via=getboldify&text=yourtext';
TwitterWindow = window.open(url, 'TwitterWindow',width=600,height=300);
return false;
}




function shareOnGoogle(){
var url = "https://plus.google.com/share?url=https://yoururl.com";
window.open(url, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=350,width=480');
return false;
}




<a onClick="shareOnFB()"> Facebook </a>
<a onClick="shareOntwitter()"> Twitter </a>
<a onClick="shareOnGoogle()"> Google </a>

没有比这更简单的了:

<a href="https://twitter.com/intent/tweet?text=optional%20promo%20text%20http://example.com/foo.htm?bar=123&baz=456" target="_blank">Tweet</a>

如果你在 html 网站上添加了手动操作,只需要替换:

&

&amp;

&

我参考了所有的方法。

对查询进行两次编码是最快的解决方案。

const query = a=123&b=456;
const url = `https://example.com/test?${encodeURIComponent(encodeURIComponent(query),)}`;




const twitterSharingURL=`https://twitter.com/intent/tweet?&url=${url}`

这对我很有效:

<div class="links">
<ul>
<li class="social-share facebook">Share on Facebook</li>
<li class="social-share twitter">Share on Twitter</li>
<li class="social-share linkedin">Share on LinkedIn</li>
</ul>
</div>

在 js 文件中添加以下内容:


setShareLinks();


function socialWindow(url) {
var left = (screen.width -570) / 2;
var top = (screen.height -570) / 2;
var params = "menubar=no,toolbar=no,status=no,width=570,height=570,top=" + top + ",left=" + left;  window.open(url,"NewWindow",params);}


function setShareLinks() {
var pageUrl = encodeURIComponent(document.URL);
var tweet = encodeURIComponent($("meta[property='og:description']").attr("content"));


$(".social-share.facebook").on("click", function() { url="https://www.facebook.com/sharer.php?u=" + pageUrl;
socialWindow(url);
});


$(".social-share.twitter").on("click", function() {
url = "https://twitter.com/intent/tweet?url=" + pageUrl + "&text=" + tweet;
socialWindow(url);
});


$(".social-share.linkedin").on("click", function() {
url = "https://www.linkedin.com/shareArticle?mini=true&url=" + pageUrl;
socialWindow(url);
})
}

希望这会有用。