【问题标题】:Facebook share errorFacebook 分享错误
【发布时间】:2013-10-07 16:52:32
【问题描述】:

我正在尝试在我的每个帖子中创建一个 facebook 分享按钮,分享内容将是动态的,这意味着我将能够为每个帖子自定义其缩略图、标题和描述。

以下是我使用的代码(顺便说一下,我在 wordpress 中使用高级自定义字段插件):

<a onClick="window.open('http://www.facebook.com/sharer.php?s=100&amp;p[title]=<?php the_field(videotitle); ?>&amp;p[summary]=<?php the_field(video_description); ?>&amp;p[url]=<?php echo get_permalink(); ?>&amp;p[images][0]=http://img.youtube.com/vi/<?php the_field(youtube_thumb); ?>/maxresdefault.jpg','sharer','toolbar=0,status=0,width=548,height=325');" href="javascript: void(0)" rel="nofollow"></a>

/////////////////////////////////////// ///////////////////////////////////////// //////

下面是将从我的 CMS 中回显我的内容的 php:

<?php the_field(videotitle); ?>
<?php the_field(video_description); ?>
<?php echo get_permalink(); ?>

代码运行良好,但我注意到当我输入标题/描述太长或在帖子中使用特殊字符时,按钮停止工作。

我应该如何克服这个问题?我对php还是很陌生,如果可能的话,请用外行的术语解释一下,提前谢谢你。

【问题讨论】:

    标签: php facebook button share


    【解决方案1】:

    问题很可能是由于将未转义的特殊字符传递到直接 javascript 调用中造成的。

    现在,当点击链接时,您会执行以下 javascript:

    window.open('http://www.facebook.com/sharer.php?s=100&amp;p[title]=<?php the_field(videotitle); ?>&amp;p[summary]=<?php the_field(video_description); ?>&amp;p[url]=<?php echo get_permalink(); ?>&amp;p[images][0]=http://img.youtube.com/vi/<?php the_field(youtube_thumb); ?>/maxresdefault.jpg','sharer','toolbar=0,status=0,width=548,height=325');
    

    您正在传递几个 PHP 变量,这可能会改变您的 javascript 的格式。例如,假设the_field(videotitle); 返回Maria's Video。如果您注意到,由于Maria's,您的字符串中有一个引号。

    现在,如果你将这个标题传递给你的 javascript,你将会有一个未转义的引号,导致一个 JS 错误,因为它会像这样输出:

    ... [title]=Maria's Video ...
    

    要解决这个问题,您必须格式化 PHP 输出以确保它不会影响 JS 代码。在我的示例中,您可以使用 PHP 附带的 urlencode 函数对输出的字符串进行编码,如下所示:

    <?php urlencode(get_the_field(videotitle)); ?>
    

    请记住,将 PHP 变量传递给 javascript 会改变 javascript 函数的语法。如果最终的 javascript 函数包含由 PHP 输出引起的语法错误,它将不会运行。

    您可以通过在浏览器中按 F12 并查看“控制台”选项卡来查看正在调试的页面上的 javascript 错误。

    【讨论】:

    • addslashes 并不是真正的正确方法——除了这里要遵守的规则“JavaScript 文本文字”上下文之外,还涉及另一个上下文,即 URL 上下文。一旦数据包含&amp;,就会破坏这个上下文,因为它意味着一个 GET 参数值的结束,以及下一个 name=value 对的开始。所以首先这里要用urlencode。 (并且由于结果中没有 ' 字符,因此之后不再需要处理这些字符。)
    • @CBroe - 好电话。我在答案中包含了 urlencode。
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多