.Дзю. Опубликовано 25 апреля, 2016 Автор Жалоба Share Опубликовано 25 апреля, 2016 Ну вот в том то и дело что оно его не преобразует почему-то. ну то есть вообще не трогает. оставляет: <video>http://vk.com/video-50584238_170993059</video> Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Minamoto Michi Опубликовано 25 апреля, 2016 Жалоба Share Опубликовано 25 апреля, 2016 (изменено) Мой - преобразует :) Или надо обязательно с тегами "Видео"? Изменено 25 апреля, 2016 пользователем Minamoto Michi Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
.Дзю. Опубликовано 25 апреля, 2016 Автор Жалоба Share Опубликовано 25 апреля, 2016 надо с тегами видео, да. работоспособность тут проверяю http://akiba.club/ но он почему то ни как не хочет этот текст подменять. ни в каком виде. оставляет без изминений Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Minamoto Michi Опубликовано 25 апреля, 2016 Жалоба Share Опубликовано 25 апреля, 2016 asd.php <?php 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"; ?> Работает так: # php -ef asd.php <video>http://vk.com/video-50584238_170993059</video> <video><iframe src="http://vk.com/video_ext.php?oid=-50584238&id=170993059&hash=0f1473b96cbfc2fc" width="560" height="315" frameborder="0"></iframe></video> Там точно именно такого типа строка на вход попадает? Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
.Дзю. Опубликовано 25 апреля, 2016 Автор Жалоба Share Опубликовано 25 апреля, 2016 Да. строка точно такая. Вот код самого файла. Я прикрутил все сервисы таким макаром, кроме ВК который не сдаётся. С твоим кодом сейчас перестало работать, выдаёт ошибку 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; } } ?> Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Minamoto Michi Опубликовано 25 апреля, 2016 Жалоба Share Опубликовано 25 апреля, 2016 (изменено) 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); /** * vk.com */ $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='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe>', $sText); } } return $sText; } Изменено 25 апреля, 2016 пользователем Minamoto Michi Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
.Дзю. Опубликовано 25 апреля, 2016 Автор Жалоба Share Опубликовано 25 апреля, 2016 Отлично! Всё работает! Только можно что бы возвращал он код без <video> </video> ? Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Minamoto Michi Опубликовано 25 апреля, 2016 Жалоба Share Опубликовано 25 апреля, 2016 Отлично! Всё работает! Только можно что бы возвращал он код без <video> </video> ? $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='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe>', $sText); Поменяй на $sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'(?:\?[\s\S]+|)<\/video>/Ui', '<iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe>', $sText); Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
.Дзю. Опубликовано 25 апреля, 2016 Автор Жалоба Share Опубликовано 25 апреля, 2016 Спасибо!! Очень сильно выручил! Моё почтение!! Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
.Дзю. Опубликовано 25 апреля, 2016 Автор Жалоба Share Опубликовано 25 апреля, 2016 $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='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe>', $sText); Поменяй на $sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'(?:\?[\s\S]+|)<\/video>/Ui', '<iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe>', $sText); некоторые ссылки не работают. с чем может быть связано? Не может хеш утянуть, например Пример http://akiba.club/blog/92.html http://vk.com/video75787450_171404317- не работают http://vk.com/video-63858240_456240721- работают Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.