3

在 facebook 共享页面中,它可以显示标题,包括 & 标记 ex:

url to share: http://myhome.com?q=hi&there

此页面的标题标签是

<title>hi&amp;there</title>

但是,实际上,facebook 共享页面显示标题:hi 链接:http ://myhome.com?q=hi

我像下面这样调用 API。"http://www.facebook.com/sharer.php?u=" + encodeURIComponent(location.href) + "&t=" + encodeURIComponent(document.title) 我尝试使用 Open graph meta tag(og:title , og:url),但它没有帮助。

我在 facebook 开发人员的调试站点 (https://developers.facebook.com/tools/debug) 中检查了我的网址。但在调试站点中,它打印了正确的标题和链接(包括&符号)

谢谢。

4

3 回答 3

2

您需要确保您的 & 符号在您的原始 url 中编码,否则它充当变量之间的分隔符。

假设您的应用程序将q查询字符串中的值作为其标题回显,则显示的 URL:http://myhome.com?q=hi&there返回两个变量:'q' = 'hi' 和 'there' = 1。

你的 URL 应该有文字&编码:http://myhome.com?q=hi%26there返回 'q' = 'hi&there'。

于 2012-05-29T16:11:16.913 回答
1

您可以使用 php 编码任何 url 字符串,例如

<? echo urlencode("http://myhome.com?q=hi"); ?>
于 2013-06-10T06:37:03.530 回答
1

通过上面的问题,我猜想完全按照它应该的方式对 url 进行硬编码并将其传递给共享者 api 不是一种选择。

问题:

您可能已经注意到,facebook(以及 g+)不会接受 '&' 字符以及后面的任何字符。

所以我们应该找到一种方法来只解码这个'&'。

如果你使用 encodeURIComponent 那么你所有的 url 的特殊字符都将被转换为 '%xx' 样式。

IE

var url_enc = encodeURIComponent('http://myhome.com?q=hi&there');
alert(url_enc);

将输出:http%3A%2F%2Fmyhome.com%3Fq%3Dhi%26there

共享者也不接受!

正如我之前所写,这里真正需要的是发送这样的 url:

http://myhome.com?q=hi%26there 

这被 facebook api 接受。

解决方案:

如果您不能按原样发送 url,并且它可能需要通过创建共享器并为您完成工作的库传递,您需要准确地传递 url,然后将 encodeURI 和 decodeURIComponent 结合起来以下。(就个人而言,我必须进行此更正才能正常工作,所以这是一个严重的错误)

在下面的示例中,我假设使用了一个 javascript 库。

var url = 'http://myhome.com?q=hi%26there';
library_function_that_creates_sharer(some_variable, url);

然后,在该函数内部,编码和解码以保持 url 完全相同。

decodeURIComponent(encodeURI(url));

换句话说:

var url_new = decodeURIComponent(encodeURI(url));

最终成为url_new = url.

于 2018-03-16T00:08:56.023 回答