facebook分享页面无法显示&(&符号)标记?

时间:2012-05-29 14:12:50

标签: facebook-sharer ampersand rich-snippets

在facebook分享页面中,它可以显示标题,包括&标记 例如:

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

此页面的标题标记为

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

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

我将API调用如下。 “http://www.facebook.com/sharer.php?u=”+ encodeURIComponent(location.href)+“&amp; t =”+ encodeURIComponent(document.title) 我尝试使用Open graph元标记(og:title,og:url),但它没有帮助。

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

感谢。

3 个答案:

答案 0 :(得分:2)

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

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

您的网址应该使用文字&编码:http://myhome.com?q=hi%26there来返回'q'='hi&amp; there'。

答案 1 :(得分:1)

通过上面的问题,我猜测硬编码的网址与它应该完全相同,并将其传递给sharer api不是一种选择。

问题:

你可能已经注意到,facebook(和g +也)不会接受'&amp;'字符以及随后的任何内容。

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

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

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

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

也不被分享者接受!

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

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

被facebook api接受。

<强>解决方案:

如果您不能按原样发送网址,并且可能需要通过创建共享者并为您完成工作的库传递,则需要准确传递url,然后组合encodeURI和decodeURIComponent如下。 (就个人而言,为了工作正常,我必须进行此修正,因此这是一个严重的错误)

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

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

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

decodeURIComponent(encodeURI(url));

换句话说:

var url_new = decodeURIComponent(encodeURI(url));

最终为url_new = url

答案 2 :(得分:0)

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

<? echo urlencode("http://myhome.com?q=hi"); ?>