2013-10-07 3 views
0

Я пытаюсь создать кнопку общего доступа к facebook в каждом из моих сообщений, а общий контент будет динамическим, что означает, что я смогу настроить его миниатюру, название и описание для каждого сообщения.Ошибка Facebook share

ниже код, который я использую (я использую заранее плагин пользовательского поля в 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(); ?> 

код работает отлично, но я заметил, когда я ввожу название/убыв 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-код. В моем примере, вы можете кодировать выводимые строки с помощью функции urlencode в комплекте с PHP, например:

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

Просто помните, что переход PHP переменные в JavaScript может изменить синтаксис вашей яваскрипта функции. Если последняя функция javascript содержит синтаксические ошибки, вызванные выходом PHP, она не будет работать.

Вы можете видеть ошибки на странице, которую вы отлаживаете, нажав F12 в своем браузере и просматривая вкладку Консоль.

+1

addslashes на самом деле не является правильным способом для этого - кроме контекста «текстовый текст JavaScript», какие правила должны здесь соблюдать, есть и другой контекст, контекст URL. После того, как данные содержат '&', это нарушит этот контекст, потому что это будет означать конец одного значения параметра GET и начало следующей пары _name = value_. Поэтому, прежде всего, нужно использовать «urlencode». (И так как это не оставляет символов '' 'в результате, позаботьтесь об этом больше не нужно после этого.) – CBroe

+0

@CBroe - Хороший звонок. Вместо этого я включил urlencode в свой ответ. – Axel