код ниже, понимаю каша там
Спойлер (Отобразить)
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class bbcode extends core{
- /*
- -----------------------------------------------------------------
- Обработка тэгов и ссылок
- -----------------------------------------------------------------
- */
- public static function tags($var)
- {
- $var = self::parse_time($var); // Обработка тэга времени
- $var = self::highlight_code($var); // Подсветка кода
- $var = self::highlight_url($var); // Обработка ссылок
- $var = self::usbb($var); // Обработка ссылок
- $var = self::OLD_highlight_url($var); // Обработка ссылок в BBcode
- $var = self::highlight_bb($var); // Обработка ссылок
- return $var;
- }
- static function usbb($var) {
- $var = preg_replace_callback('/us{(\d*)}/', 'fnc::color', $var);
- return $var;
- }
- function links($text)
- {
- $text = preg_replace('|http:\/\/www\.|is','http://',$text);
- $text = preg_replace('|www\.|is','http://',$text);
- $text = preg_replace('/(http:\/\/([\w\d\.\?\&\#\;\:\+\-\=\%\/]+))/i', '<a href="/away?url=$1" >$1</a>', $text);
- $text = preg_replace('/(www\.([a-zA-Z_0-9\.\?\&\#\;\:\+\-\=\%\/]*))/i', '<a href="/away?url=http://$1" >$1</a>', $text);
- $text = preg_replace('|/away\?url=https:\/\/мой_сайт\.us|is','https://мой_сайт.us',$text);
- $text = preg_replace('|/away\?url=wwww\.мой_сайт\.us|is','https://мой_сайт.us',$text);
- $text = preg_replace('|/away\?url=https:\/\/wwww\.мой_сайт\.us|is','https://мой_сайт.us"',$text);
- return($text);
- }
- /*
- -----------------------------------------------------------------
- Обработка времени
- -----------------------------------------------------------------
- */
- private static function parse_time($var){
- if (!function_exists('process_time')){
- function process_time($time){
- $shift = (core::$conf['timeshift'] + core::$setting['timeshift']) * 3600;
- if($out = strtotime($time))return date("d.m.Y / H:i", $out + $shift);
- else return false;
- }
- }
- return preg_replace(array('#\[time\](.+?)\[\/time\]#se'), array("''.process_time('$1').''"), $var);
- }
- /*
- -----------------------------------------------------------------
- Парсинг ссылок
- -----------------------------------------------------------------
- За основу взята доработанная функция от форума phpBB 3.x.x
- -----------------------------------------------------------------
- */
- public static function highlight_url($text)
- {
- if (!function_exists('url_callback')) {
- function url_callback($type, $whitespace, $url, $relative_url)
- {
- $orig_url = $url;
- $orig_relative = $relative_url;
- $url = htmlspecialchars_decode($url);
- $relative_url = htmlspecialchars_decode($relative_url);
- $text = '';
- $chars = array('<', '>', '"');
- $split = false;
- foreach ($chars as $char) {
- $next_split = strpos($url, $char);
- if ($next_split !== false) {
- $split = ($split !== false) ? min($split, $next_split) : $next_split;
- }
- }
- if ($split !== false) {
- $url = substr($url, 0, $split);
- $relative_url = '';
- } else if ($relative_url) {
- $split = false;
- foreach ($chars as $char) {
- $next_split = strpos($relative_url, $char);
- if ($next_split !== false) {
- $split = ($split !== false) ? min($split, $next_split) : $next_split;
- }
- }
- if ($split !== false) {
- $relative_url = substr($relative_url, 0, $split);
- }
- }
- $last_char = ($relative_url) ? $relative_url[strlen($relative_url) - 1] : $url[strlen($url) - 1];
- switch ($last_char)
- {
- case '.':
- case '?':
- case '!':
- case ':':
- case ',':
- $append = $last_char;
- if ($relative_url) $relative_url = substr($relative_url, 0, -1);
- else $url = substr($url, 0, -1);
- break;
- default:
- $append = '';
- break;
- }
- $short_url = $url;
- switch ($type)
- {
- case 1:
- $relative_url = preg_replace('/[&?]sid=[0-9a-f]{32}$/', '', preg_replace('/([&?])sid=[0-9a-f]{32}&/', '$1', $relative_url));
- $url = $url . '/' . $relative_url;
- $text = $relative_url;
- if (!$relative_url) {
- return $whitespace . $orig_url . '/' . $orig_relative;
- }
- break;
- case 2:
- $text = $short_url;
- if (!isset($setting['direct_url']) || $setting['direct_url'])
- if (!isset($setting['direct_url']) || $setting['direct_url'])
- $url = '/away?url=' . rawurlencode($url);
- break;
- case 3:
- $url = 'http://' . $url;
- $text = $short_url;
- if (!isset($setting['direct_url']) || $setting['direct_url'])
- $url = '/away?url=' . rawurlencode($url);
- break;
- case 4:
- $text = $short_url;
- $url = 'mailto:' . $url;
- break;
- }
- $url = htmlspecialchars($url);
- $text = htmlspecialchars($text);
- $append = htmlspecialchars($append);
- return $whitespace . '<a href="' . $url . '">' . $text . '</a>' . $append;
- }
- }
- static $url_match;
- static $url_replace;
- if (!is_array($url_match)) {
- $url_match = $url_replace = array();
- // Обработка внутренние ссылки
- $diurl = 'https://'.homeurl;
- $url_match[] = '#(^|[\n\t (>.])(' . preg_quote($diurl, '#') . ')/((?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})*(?:/(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?)#ieu';
- $url_replace[] = "url_callback(1, '\$1', '\$2', '\$3')";
- // Обработка обычных ссылок типа xxxx://aaaaa.bbb.cccc. ...
- $url_match[] = '#(^|[\n\t (>.])([a-z][a-z\d+]*:/{2}(?:(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})+|[0-9.]+|\[[a-zа-яё0-9.]+:[a-zа-яё0-9.]+:[a-zа-яё0-9.:]+\])(?::\d*)?(?:/(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?)#ieu';
- $url_replace[] = "url_callback(2, '\$1', '\$2', '')";
- // Обработка сокращенных ссылок, без указания протокола "www.xxxx.yyyy[/zzzz]"
- $url_match[] = '#(^|[\n\t (>])(www\.(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})+(?::\d*)?(?:/(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?)#ieu';
- $url_replace[] = "url_callback(3, '\$1', '\$2', '')";
- }
- return preg_replace($url_match, $url_replace, $text);
- }
- /*
- */
- static function notags($var = '')
- {
- $var = preg_replace_callback('/us{(\d*)}/', 'fnc::color', $var);
- $var = preg_replace('#\[img\](.*?)\[/img\]#si', '<img src="\1">', $var);
- $var = preg_replace('#\[color=(.+?)\](.+?)\[/color]#si', '$2', $var);
- $var = preg_replace('!\[bg=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)](.+?)\[/bg]!is', '$2', $var);
- $var = preg_replace('#\[spoiler=(.+?)\](.+?)\[/spoiler]#si', '$2', $var);
- $replace = array(
- '[center]' => '',
- '[/center]' => '',
- '[small]' => '',
- '[/small]' => '',
- '[big]' => '',
- '[/big]' => '',
- '[green]' => '',
- '[/green]' => '',
- '[red]' => '',
- '[/red]' => '',
- '[blue]' => '',
- '[/blue]' => '',
- '[b]' => '',
- '[/b]' => '',
- '[i]' => '',
- '[/i]' => '',
- '[u]' => '',
- '[/u]' => '',
- '[s]' => '',
- '[/s]' => '',
- '[quote]' => '',
- '[/quote]' => '',
- '[c]' => '',
- '[/c]' => '',
- '[*]' => '',
- '[/*]' => ''
- );
- return strtr($var, $replace);
- }
- /*
- -----------------------------------------------------------------
- Подсветка кода
- -----------------------------------------------------------------
- */
- private static function highlight_code($var)
- {
- if (!function_exists('process_code')) {
- function process_code($php)
- {
- $php = strtr($php, array('<br />' => '', '\\' => '\'));
- $php = html_entity_decode(trim($php), ENT_QUOTES, 'UTF-8');
- $php = substr($php, 0, 2) != "<?" ? "<?PHP \n" . $php . "\n?>" : $php;
- $php = highlight_string(stripslashes($php), true);
- $php = strtr($php, array('\\' => '\', ':' => ':', '[' => '['));
- return '<div class="code">' . $php . '</div>';
- }
- }
- return preg_replace(array('#\[php\](.+?)\[\/php\]#se'), array("''.process_code('$1').''"), str_replace("]\n", "]", $var));
- }
- /*
- -----------------------------------------------------------------
- Обработка URL в тэгах BBcode
- -----------------------------------------------------------------
- */
- private static function OLD_highlight_url($var)
- {
- if (!function_exists('process_url')) {
- function process_url($url)
- {
- $diurl = 'https://'.homeurl;
- $tmp = parse_url($url[1]);
- if ('http://' . $tmp['host'] == $diurl || isset(core::$setting['direct_url']) && core::$setting['direct_url']) {
- return '<a href="' . $url[1] . '">' . $url[2] . '</a>';
- } else {
- return '<a href="/away?url=' . rawurlencode($url[1]) . '">' . $url[2] . '</a>';
- }
- }
- }
- return preg_replace_callback('~\\[url=(https?://.+?)\\](.+?)\\[/url\\]~', 'process_url', $var);
- }