', '"'); $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 = (mb_strlen($url) > 40) ? mb_substr($url, 0, 30) . ' ... ' . mb_substr($url, -5) : $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(core::$user_set['direct_url']) || !core::$user_set['direct_url']) { $url = core::$system_set['homeurl'] . '/go.php?url=' . rawurlencode($url); } break; case 3: $url = 'http://' . $url; $text = $short_url; if (!isset(core::$user_set['direct_url']) || !core::$user_set['direct_url']) { $url = core::$system_set['homeurl'] . '/go.php?url=' . rawurlencode($url); } break; case 4: $text = $short_url; $url = 'mailto:' . $url; break; } $url = htmlspecialchars($url); $text = htmlspecialchars($text); $append = htmlspecialchars($append); return $whitespace . '' . $text . '' . $append; } } static $url_match; static $url_replace; if (!is_array($url_match)) { $url_match = $url_replace = array(); // Обработка внутренние ссылки $url_match[] = '#(^|[\n\t (>.])(' . preg_quote(core::$system_set['homeurl'], '#') . ')/((?:[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); } /* ----------------------------------------------------------------- Удаление bbCode из текста ----------------------------------------------------------------- */ static function notags($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( '[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('
' => '', '\\' => 'slash_JOHNCMS')); $php = html_entity_decode(trim($php), ENT_QUOTES, 'UTF-8'); $php = substr($php, 0, 2) != "" : $php; $php = highlight_string(stripslashes($php), true); $php = strtr($php, array('slash_JOHNCMS' => '\', ':' => ':', '[' => '[')); return '
' . $php . '
'; } } 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) { $tmp = parse_url($url[1]); if ('http://' . $tmp['host'] == core::$system_set['homeurl'] || isset(core::$user_set['direct_url']) && core::$user_set['direct_url']) { return '' . $url[2] . ''; } else { return '' . $url[2] . ''; } } } return preg_replace_callback('~\\[url=(https?://.+?)\\](.+?)\\[/url\\]~', 'process_url', $var); } /* ----------------------------------------------------------------- Обработка bbCode ----------------------------------------------------------------- */ private static function highlight_bb($var) { // Список поиска $search = array( '#\[b](.+?)\[/b]#is', // Жирный '#\[i](.+?)\[/i]#is', // Курсив '#\[u](.+?)\[/u]#is', // Подчеркнутый '#\[s](.+?)\[/s]#is', // Зачеркнутый '#\[small](.+?)\[/small]#is', // Маленький шрифт '#\[big](.+?)\[/big]#is', // Большой шрифт '#\[red](.+?)\[/red]#is', // Красный '#\[green](.+?)\[/green]#is', // Зеленый '#\[blue](.+?)\[/blue]#is', // Синий '!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)](.+?)\[/color]!is', // Цвет шрифта '!\[bg=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)](.+?)\[/bg]!is', // Цвет фона '#\[(quote|c)](.+?)\[/(quote|c)]#is', // Цитата '#\[\*](.+?)\[/\*]#is', // Список '#\[youtube\](.*?)\[/youtube\]#si', //Youtube "#\[swf\](.+?)\[/swf\]#is", //Flash '#\[spoiler=(.+?)](.+?)\[/spoiler]#is' // Спойлер ); // Список замены $replace = array( '$1', // Жирный '$1', // Курсив '$1', // Подчеркнутый '$1', // Зачеркнутый '$1', // Маленький шрифт '$1', // Большой шрифт '$1', // Красный '$1', // Зеленый '$1', // Синий '$2', // Цвет шрифта '$2', // Цвет фона '$2', // Цитата '$1', // Список '
$1 (+/-)
', // Спойлер ' ', ' ); return preg_replace($search, $replace, $var); } /* ----------------------------------------------------------------- Панель кнопок bbCode (для компьютеров) ----------------------------------------------------------------- */ public static function auto_bb($form, $field) { $colors = array( 'ffffff', 'bcbcbc', '708090', '6c6c6c', '454545', 'fcc9c9', 'fe8c8c', 'fe5e5e', 'fd5b36', 'f82e00', 'ffe1c6', 'ffc998', 'fcad66', 'ff9331', 'ff810f', 'd8ffe0', '92f9a7', '34ff5d', 'b2fb82', '89f641', 'b7e9ec', '56e5ed', '21cad3', '03939b', '039b80', 'cac8e9', '9690ea', '6a60ec', '4866e7', '173bd3', 'f3cafb', 'e287f4', 'c238dd', 'a476af', 'b53dd2' ); $i = 1; $font_color = ''; $bg_color = ''; foreach ($colors as $value) { $font_color .= ''; $bg_color .= ''; } $smileys = !empty(self::$user_data['smileys']) ? unserialize(self::$user_data['smileys']) : ''; if (!empty($smileys)) { $res_sm = ''; $bb_smileys = '' . self::$lng['edit_list'] . '
'; foreach ($smileys as $value) $res_sm .= ':' . $value . ': '; $bb_smileys .= functions::smileys($res_sm, self::$user_data['rights'] >= 1 ? 1 : 0); } else { $bb_smileys = '' . self::$lng['add_smileys'] . ''; } $out = ' b i u s s spoiler quote cod url '; if (self::$user_id) { $out .= ' sm
'; }else $out .= '
'; $out .= ''. ''; return $out; } }