0

我正在尝试在我的每个帖子中创建一个 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还是很陌生,如果可能的话,请用外行的术语解释一下,提前谢谢你。

4

1 回答 1

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 错误。

于 2013-10-07T17:35:44.203 回答