2013-10-07 93 views
0

我试图在每篇文章中创建一个Facebook共享按钮,共享内容将是动态的,这意味着我将能够为每个帖子定制其缩略图,标题和说明。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> 

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

下面是php会回显我的来自我的CMS的内容:

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

该代码工作正常,但我注意到当我输入title/desc ription太长或在我的帖子中使用特殊字符按钮停止工作。

我应该如何克服这一点?我仍然对PHP很陌生,如果可能的话请用外行人的名义解释,并提前致谢。

回答

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

+1

addslashes并不是真正的正确方法 - 除了上下文“JavaScript文本文字”,这里需要遵守哪些规则,还有另一个涉及的上下文环境。一旦数据包含一个'&',就会破坏这个上下文,因为这意味着一个GET参数值的结束,以及下一个_name = value_对的开始。首先,'urlencode'就是在这里使用的。 (因为结果中没有'''字符,所以在以后不需要处理这些字符。) – CBroe

+0

@CBroe - 好的电话。相反,我在我的回答中包含了urlencode。 – Axel