2013-10-07 167 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