Совместное использование URL-адреса с строкой запроса в Twitter

Я пытаюсь поместить ссылку на общий доступ в Twitter по электронной почте. Поскольку это по электронной почте, я не могу полагаться на JavaScript и должен использовать кнопку "Построить свою собственную".

Например, поделитесь ссылкой на Google:

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

Это прекрасно работает. Проблема, с которой я столкнулся, заключается в том, что URL-адрес содержит строку запроса.

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

URL-адреса с строками запроса путают службу сокращения URL-адресов Twitter, t.co. Я пробовал кодирование URL по-разному и не могу заставить ничего работать. Самое близкое, что я получил, - это сделать это.

<a href="#" onclick="location.href='http://www.twitter.com/share?url=http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456'; return false;">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. Когда я это делаю, в Tweet не появляется URL.

Ответ 1

Это можно решить, используя https://twitter.com/intent/tweet вместо http://www.twitter.com/share. Используя функцию intent/tweet, вы просто URL-код кодируете весь URL-адрес, и он работает как шарм.

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

Ответ 5

Вам необязательно использовать намерение, он кодирует ваш URL-адрес, он также будет работать с твиттер-сайтом.

Ответ 6

Вы можете использовать эти функции:

 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>

Ответ 7

Не становится проще, чем это:

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

Ответ 8

Как упоминалось в @onteria_, вам нужно закодировать весь параметр. Для тех, кто сталкивается с одной и той же проблемой, вы можете использовать следующий букмарклет для генерации правильно закодированного URL-адреса. Скопируйте его в свою адресную строку браузера, чтобы создать URL-адрес общего доступа twitter. Убедитесь, что префикс 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 Fiddle http://jsfiddle.net/2frkV/

Ответ 9

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>

Ответ 11

Если вы добавили руководство на html-сайт, просто замените:

&

С

&amp;

Стандартный HTML-код для & amp;