Да. строка точно такая. Вот код самого файла. Я прикрутил все сервисы таким макаром, кроме ВК который не сдаётся.
С твоим кодом сейчас перестало работать, выдаёт ошибку
Parse error: syntax error, unexpected '}', expecting variable (T_VARIABLE) or '$' in */Text.class.php on line 168
<?php
---------------------------------------------------------
*/
require_once(Config::Get('path.root.engine').'/lib/external/Jevix/jevix.class.php');
/**
* Модуль обработки текста на основе типографа Jevix
* Позволяет вырезать из текста лишние HTML теги и предотвращает различные попытки внедрить в текст JavaScript
* <pre>
* $sText=$this->Text_Parser($sTestSource);
* </pre>
* Настройки парсинга находятся в конфиге /config/jevix.php
*
* @package engine.modules
* @since 1.0
*/
class ModuleText extends Module {
/**
* Объект типографа
*
* @var Jevix
*/
protected $oJevix;
/**
* Инициализация модуля
*
*/
public function Init() {
/**
* Создаем объект типографа и запускаем его конфигурацию
*/
$this->oJevix = new Jevix();
$this->JevixConfig();
}
/**
* Конфигурирует типограф
*
*/
protected function JevixConfig() {
// загружаем конфиг
$this->LoadJevixConfig();
}
/**
* Загружает конфиг Jevix'а
*
* @param string $sType Тип конфига
* @param bool $bClear Очищать предыдущий конфиг или нет
*/
public function LoadJevixConfig($sType='default',$bClear=true) {
if ($bClear) {
$this->oJevix->tagsRules=array();
}
$aConfig=Config::Get('jevix.'.$sType);
if (is_array($aConfig)) {
foreach ($aConfig as $sMethod => $aExec) {
foreach ($aExec as $aParams) {
if (in_array(strtolower($sMethod),array_map("strtolower",array('cfgSetTagCallbackFull','cfgSetTagCallback')))) {
if (isset($aParams[1][0]) and $aParams[1][0]=='_this_') {
$aParams[1][0]=$this;
}
}
call_user_func_array(array($this->oJevix,$sMethod), $aParams);
}
}
/**
* Хардкодим некоторые параметры
*/
unset($this->oJevix->entities1['&']); // разрешаем в параметрах символ &
if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a'])) {
$this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}
}
}
/**
* Возвращает объект Jevix
*
* @return Jevix
*/
public function GetJevix() {
return $this->oJevix;
}
/**
* Парсинг текста с помощью Jevix
*
* @param string $sText Исходный текст
* @param array $aError Возвращает список возникших ошибок
* @return string
*/
public function JevixParser($sText,&$aError=null) {
// Если конфиг пустой, то загружаем его
if (!count($this->oJevix->tagsRules)) {
$this->LoadJevixConfig();
}
$sResult=$this->oJevix->parse($sText,$aError);
return $sResult;
}
/**
* Парсинг текста на предмет видео
* Находит теги <pre><video></video></pre> и реобразовываетих в видео
*
* @param string $sText Исходный текст
* @return string
*/
public function VideoParser($sText) {
/**
* youtube.com
*/
$sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>', $sText);
/**
/**
* youtu.be
*/
$sText = preg_replace('/<video>http:\/\/(?:www\.|)youtu.be\/([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1?rel=0" frameborder="0" allowfullscreen></iframe>', $sText);
/**
* twitch
*/
$sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)twitch.tv\/([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<iframe src="https://player.twitch.tv/?channel=$1" frameborder="0" scrolling="no" height="315" width="560" class="youtube"></iframe>', $sText);
/**
* twitch
*/
$sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)twitch.tv\/([a-zA-Z0-9_\-]+)(&.+)?\/v\/([A-Z]{1}|[0-9]{8}).*<\/video>/Ui', '<iframe src="https://player.twitch.tv/?video=v$3" frameborder="0" scrolling="no" height="315" width="560" class="youtube"></iframe>', $sText);
/**
* twitch chat
*/
$sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)twitch.tv\/([a-zA-Z0-9_\-]+)(&.+)?\/chat<\/video>/Ui', '<div align="center"><iframe src="https://www.twitch.tv/$1/chat?popout=" frameborder="0" scrolling="no" height="500" width="650"></iframe></div>', $sText);
/**
* vimeo.com
*/
$sText = preg_replace('/<video>http:\/\/(?:www\.|)vimeo\.com\/(\d+).*<\/video>/i', '<iframe src="http://player.vimeo.com/video/$1" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>', $sText);
/**
* rutube.ru
*/
$sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube\.ru\/tracks\/(\d+)\.html.*<\/video>/Ui', '<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/$1"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" ></EMBED></OBJECT>', $sText);
/**
* video.yandex.ru
*/
$sText = preg_replace('/<video>http:\/\/video\.yandex\.ru\/users\/([a-zA-Z0-9_\-]+)\/view\/(\d+).*<\/video>/i', '<object width="467" height="345"><param name="video" value="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="noscale"></param><embed src="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect" type="application/x-shockwave-flash" width="467" height="345" allowFullScreen="true" scale="noscale" ></embed></object>', $sText);
return $sText;
#Регулярка для вконтакта
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$sText="<video>http://vk.com/video-50584238_170993059</video>";
print "$sText\n";
$regExp = '/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video((?:-|)[\d]+)_((?:-|)[\d]+)(?:\?[\s\S]+|)<\/video>/i';
if(preg_match($regExp, $sText)) {
preg_match_all($regExp, $sText, $sTextMatches);
for($i=0;$i<count($sTextMatches[1]);$i++){
$html = file_get_contents('http://vk.com/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i]);
preg_match('/\\\"hash2\\\":\\\"([a-f0-9]+)\\\"/Ui', $html, $matches);
$sText = preg_replace('/(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'(?:\?[\s\S]+|)/Ui', '<iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$
}
}
print "$sText\n";
}
/**
* Парсит текст, применя все парсеры
*
* @param string $sText Исходный текст
* @return string
*/
public function Parser($sText) {
if (!is_string($sText)) {
return '';
}
$sResult=$this->FlashParamParser($sText);
$sResult=$this->JevixParser($sResult);
$sResult=$this->VideoParser($sResult);
$sResult=$this->CodeSourceParser($sResult);
return $sResult;
}
/**
* Заменяет все вхождения короткого тега <param/> на длиную версию <param></param>
* Заменяет все вхождения короткого тега <embed/> на длиную версию <embed></embed>
*
* @param string $sText Исходный текст
* @return string
*/
protected function FlashParamParser($sText) {
if (preg_match_all("@(<\s*param\s*name\s*=\s*(?:\"|').*(?:\"|')\s*value\s*=\s*(?:\"|').*(?:\"|'))\s*/?\s*>(?!</param>)@Ui",$sText,$aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$str_new=$str.'></param>';
$sText=str_replace($aMatch[0][$key],$str_new,$sText);
}
}
if (preg_match_all("@(<\s*embed\s*.*)\s*/?\s*>(?!</embed>)@Ui",$sText,$aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$str_new=$str.'></embed>';
$sText=str_replace($aMatch[0][$key],$str_new,$sText);
}
}
/**
* Удаляем все <param name="wmode" value="*"></param>
*/
if (preg_match_all("@(<param\s.*name=(?:\"|')wmode(?:\"|').*>\s*</param>)@Ui",$sText,$aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$sText=str_replace($aMatch[0][$key],'',$sText);
}
}
/**
* А теперь после <object> добавляем <param name="wmode" value="opaque"></param>
* Решение не фантан, но главное работает :)
*/
if (preg_match_all("@(<object\s.*>)@Ui",$sText,$aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$sText=str_replace($aMatch[0][$key],$aMatch[0][$key].'<param name="wmode" value="opaque"></param>',$sText);
}
}
return $sText;
}
/**
* Подсветка исходного кода
*
* @param string $sText Исходный текст
* @return mixed
*/
public function CodeSourceParser($sText) {
$sText=str_replace("<code>",'<pre class="prettyprint"><code>',$sText);
$sText=str_replace("</code>",'</code></pre>',$sText);
return $sText;
}
/**
* Производить резрезание текста по тегу cut.
* Возвращаем массив вида:
* <pre>
* array(
* $sTextShort - текст до тега <cut>
* $sTextNew - весь текст за исключением удаленного тега
* $sTextCut - именованное значение <cut>
* )
* </pre>
*
* @param string $sText Исходный текст
* @return array
*/
public function Cut($sText) {
$sTextShort = $sText;
$sTextNew = $sText;
$sTextCut = null;
$sTextTemp=str_replace("\r\n",'[<rn>]',$sText);
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
$aMatch[1]=str_replace('[<rn>]',"\r\n",$aMatch[1]);
$aMatch[1]=str_replace('[<n>]',"\r\n",$aMatch[1]);
$aMatch[3]=str_replace('[<rn>]',"\r\n",$aMatch[3]);
$aMatch[3]=str_replace('[<n>]',"\r\n",$aMatch[3]);
$sTextShort=$aMatch[1];
$sTextNew=$aMatch[1].' <a name="cut"></a> '.$aMatch[3];
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*\/?$/Ui',$aMatch[2],$aMatchCut)) {
$sTextCut=trim($aMatchCut[1]);
}
}
return array($sTextShort,$sTextNew,$sTextCut ? htmlspecialchars($sTextCut) : null);
}
/**
* Обработка тега ls в тексте
* <pre>
* <ls user="admin" />
* </pre>
*
* @param string $sTag Тег на ктором сработал колбэк
* @param array $aParams Список параметров тега
* @return string
*/
public function CallbackTagLs($sTag,$aParams) {
$sText='';
if (isset($aParams['user'])) {
if ($oUser=$this->User_getUserByLogin($aParams['user'])) {
$sText.="<a href=\"{$oUser->getUserWebPath()}\" class=\"ls-user\">{$oUser->getLogin()}</a> ";
}
}
return $sText;
}
}
?>