如何在facebook sharer中处理GET参数

时间:2013-06-06 08:33:44

标签: facebook facebook-sharer

我正在尝试使用简单的Sharer在Facebook上分享链接 我以这种方式传递一些参数:

title="Share this article/post/whatever on Facebook"    
href="http://www.facebook.com/sharer.php?
s=100
&p[url]=http://www.mypage.com/index.php?firstID=1&secondID=2
//etc.

但它只是部分工作,因为它只采用firstID而不是第二种。
我的猜测是Facebook认为secondID是它自己的,但它不能使用它而且它丢弃了参数 我猜怎么逃脱它们?

3 个答案:

答案 0 :(得分:1)

使用sharer.php分享页面时,您应该对URL进行编码,以便它以适当的方式使用它,否则它可能会将secondID等参数作为自己的参数进行编码错误地渲染URL。

答案 1 :(得分:1)

在共享网址上使用PHP rawurlencode()

title="Share this article/post/whatever on Facebook"    
href="http://www.facebook.com/sharer.php?
s=100
&p[url]=<?=rawurlencode('http://www.mypage.com/index.php?firstID=1&secondID=2')?>

答案 2 :(得分:0)

找到了可行的解决方案。 Facebook不直接接受您本地页面中带有参数的URL。它会在过程中剥离它们。如果使用PHP编写自己的代码,则可以通过对参数进行编码,然后将此编码后的字符串附加到页面URL的末尾来解决此问题。

如果您正在使用简码来填充页面,那么这在WordPress环境中同样适用。

我想到的代码段是这样的:

 // When generating a URL for display, encode the parameters within the standard URL
 $PageURL       = "https://yourdomain/page";
 $EncodedParams = urlencode('param1='.<YOUR VALUE> . '&param1='.<YOUR VALUE>);
 $URLPath       = $PageURL . '?' . $EncodedParams . '#';

现在在相关页面上

 // This find the page you are currently displaying
 $protocol      = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || 
 $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
 $url           = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

// Retrieve the parameters from the URL
$EncodedParams = substr($url, strrpos($url, '?' )+1);
$DecodeParams  = urldecode ($EncodedParams);

$Params        = explode('&', $DecodeParams);
$temp          = explode('param1=', $Params[0]);
$Param1       = $temp[1];
$temp          = explode('param2=', $Params[1]);
$Param2        = $temp[1];
现在可以在代码中使用

Param1和Param2进行进一步定义。诀窍全在于编码。