Проблема с вставкой кода видео плеера (ненужное типографирование тегов)
добрый день!
проблема следующая:
при вставке кода видео плеера (сайт tvigle.ru) в топик происходит замена некоторых параметров тегов и тегов html кодом.
например, исходный код:
код, который получается после обработки парсерами:
как видим в теге param амперсанд (&) заменяются на
и весь тег embed типографируется, т.е. вместо
вместо
получаем
и так далее в том же духе
живой пример можно посмотреть здесь — wokrug.ru/garniry/2011/04/22/kartofel-po-andaluzski.html
вводные данные:
версия LiveStreet — 0.4.2
редактор топиков — стандартный LiveStreet
что пробовал делать:
менять настройки Jevix в Text.class.php, в частности пробовал дописывать
p.s. все выходные читал ответы на подобные вопросы на сайте, но ничего так и не нашел, т.к. большинство сводится к хитрым манипуляциям с кодом плеера, а это для пользователя неприемлемо — пользователь должен иметь возможность взять код в одном месте и вставить его в другое место. опять же не подходят варианты написать парсер, по типу Ютюба и Вконтакте, т.к. всегда найдется очередной видео хостинг с которым будет затык при вставке плеера на сайт. Т.е. необходимо решение (изменение кода Text.class.php или Jevix.php или дополнительный модуль) которое позволяло бы вставлять код любого видео плеера в пост без искажения самого кода (пусть даже с риском для безопасности, пусть администратор сайта сам решает как ему быть — опасаться, что когда сайт достигнет посещаемости Фейсбука какой то нехороший пользователь удумает нанести вред сайту внедрение вредоносного кода, или дать пользователям без гемора устанавливать код любого плеера на сайт).
заранее всем спасибо за помощь!
проблема следующая:
при вставке кода видео плеера (сайт tvigle.ru) в топик происходит замена некоторых параметров тегов и тегов html кодом.
например, исходный код:
<object id="v28425_1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="650" height="488" ><param name="wmode" value="opaque"></param>
<param name="FlashVars" value="vote=0&srv=pub.tvigle.ru&prt=606ef00364bea873c57a77c79a3a34a8&id=28425&w=650&h=488&type=&dopparam=&modes=1"></param>
<param name="allowFullScreen" value="true"></param>
<param name="movie" value="http://pub.tvigle.ru/swf/tvigle_single_v2.swf"></param>
<param name="quality" value="high"></param>
<param name="bgcolor" value="#000000"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://pub.tvigle.ru/swf/tvigle_single_v2.swf" allowscriptaccess="always"
quality="high" width="650" height="488" bgcolor="#000000"
allowfullscreen="true" flashvars="vote=0&srv=pub.tvigle.ru&prt=606ef00364bea873c57a77c79a3a34a8&id=28425&w=650&h=488&type=&dopparam=&modes=1"
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
код, который получается после обработки парсерами:
<object width="650" height="488"><param name="wmode" value="opaque"></param>
<param name="FlashVars" value="vote=0&srv=pub.tvigle.ru&prt=606ef00364bea873c57a77c79a3a34a8&id=28425&w=650&h=488&type=&dopparam=&modes=1"></param><param name="allowFullScreen" value="true"></param>
<param name="movie" value="http://pub.tvigle.ru/swf/tvigle_single_v2.swf"></param>
<param name="quality" value="high"></param><param name="bgcolor" value="#000000"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://pub.tvigle.ru/swf/tvigle_single_v2.swf" allowscriptaccess="always"quality="high" width="650" height="488" bgcolor="#000000" allowfullscreen="true" flashvars="vote=0&srv=pub.tvigle.ru&prt=606ef00364bea873c57a77c79a3a34a8&id=28425&w=650&h=488&type=&dopparam=&modes=1"type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>
как видим в теге param амперсанд (&) заменяются на
&
, что делать не надо,и весь тег embed типографируется, т.е. вместо
<embed
получается <embed
вместо
"
получаем
"
и так далее в том же духе
живой пример можно посмотреть здесь — wokrug.ru/garniry/2011/04/22/kartofel-po-andaluzski.html
вводные данные:
версия LiveStreet — 0.4.2
редактор топиков — стандартный LiveStreet
что пробовал делать:
менять настройки Jevix в Text.class.php, в частности пробовал дописывать
$this->oJevix->cfgSetTagNoTypography('embed');
по сути это должно запретить Jevix типографировать тег embed, не помогло(.p.s. все выходные читал ответы на подобные вопросы на сайте, но ничего так и не нашел, т.к. большинство сводится к хитрым манипуляциям с кодом плеера, а это для пользователя неприемлемо — пользователь должен иметь возможность взять код в одном месте и вставить его в другое место. опять же не подходят варианты написать парсер, по типу Ютюба и Вконтакте, т.к. всегда найдется очередной видео хостинг с которым будет затык при вставке плеера на сайт. Т.е. необходимо решение (изменение кода Text.class.php или Jevix.php или дополнительный модуль) которое позволяло бы вставлять код любого видео плеера в пост без искажения самого кода (пусть даже с риском для безопасности, пусть администратор сайта сам решает как ему быть — опасаться, что когда сайт достигнет посещаемости Фейсбука какой то нехороший пользователь удумает нанести вред сайту внедрение вредоносного кода, или дать пользователям без гемора устанавливать код любого плеера на сайт).
заранее всем спасибо за помощь!
23 комментария
для примера привожу код одного и того же ролика для пользователей и для партнеров (с дополнительными параметрами).
код с сайта (http://www.tvigle.ru/category/kitchen/vkusno?video=469004):
тот же код для с расширенными параметрами:
и вот результат установки «партнерского» кода на сайт:
вот результат вставки кода плеера с расширенными параметрами:
livestreet.ru/blog/3545.html#comment106949
убрал все переносы строк, в коде появился нормальный embed, но осталась проблема амперсандов — в параметрах все амперсанды заменены на хтмл.
ниже код плеера без переносов строк (смотри код страницы):
у вас в конце
type и dopparam вообще пустые. какие параметры отвечают чтобы в конце небыло «Смотрите на ...»?
с «Смотрите на ...»:
т.е. за «Смотрите на ...» отвечает
возможно длина строки флешварс имеет огран-е.
при установке кода напрямую в базу — все работает на ура. тем более, что код то я не сочинил, его умные люди из Твигла написали.
каково решение проблемы с переносами строк — писать в Text.class.php парсер типа «если между object — убирать \r\n» или править Jevix.php, что бы он отлавливал object и embed не только как одну строку, в этом случае вопрос — где оно там?
есть. кстати у вас там пробела не хватает
flashvars=«vote=0&srv=pub.tvigle.ru&prt=606ef00364bea873c57a77c79a3a34a8&id=28425&w=500&h=375&type=&dopparam=&modes=1»type=«application/x-shockwave-flash»
какие будут мысли по поводу как автоматически убирать пустые строки, что бы Jevix корректно код видео плеера распознавал? думаю все же легче в Text.class.php парсер дописывать
либо попробовать ключ /m (многострочность) в регеспе парсера ембед и обжект кода в текст.класс.пхп.
быструю победу не гарантирую, т.к. я Перловый программист, но с помощью общественности разберусь)
не знаю насколько это красиво со стороны эстетов PHP, но работает)
если чего то налажал с ключами, регекспом и кодом вообще — знатоки PHP поправьте пожалуйста.
всем спасибо за помощь!
к сожалению плюсовать еще не умею — руки до кнопок не достают)