0 something is wrong with the quote syntax if ($q_depth > 0) message($lang_common['BBCode error'].' '.$lang_common['BBCode error 4']); else if ($q_depth < 0) message($lang_common['BBCode error'].' '.$lang_common['BBCode error 5']); // If the quote depth level was higher than $max_depth we return the index for the // beginning and end of the part we should strip out if (isset($overflow_begin)) return array($overflow_begin, $overflow_end); else return null; } // // Truncate URL if longer than 55 characters (add http:// or ftp:// if missing) // function truncate_url($url, $link = '') { global $cur_user; $full_url = $url; if (strpos($url, 'www.') === 0) $full_url = 'http://'.$full_url; else if (strpos($url, 'ftp.') === 0) $full_url = 'ftp://'.$full_url; // Ok, not very pretty :-) $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' ... '.substr($url, -10) : $url) : stripslashes($link); if ($cur_user['link_to_new_win'] == '0') return ''.$link.''; else return ''.$link.''; } // // Convert BBCodes to their HTML equivalent // function do_bbcode($message) { global $cur_user; if (strpos($message, '[') !== false && strpos($message, ']') !== false) { $pattern = array("#\[b\](.*?)\[/b\]#s", "#\[i\](.*?)\[/i\]#s", "#\[u\](.*?)\[/u\]#s", "#\[url\](.*?)\[/url\]#ie", "#\[url=(.*?)\](.*?)\[/url\]#ie", "#\[email\](.*?)\[/email\]#i", "#\[email=(.*?)\](.*?)\[/email\]#i", "#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.*?)\[/color\]#s"); $replace = array('$1', '$1', '$1', 'truncate_url("$1")', 'truncate_url("$1", "$2")', '$1', '$2', '$2'); // Run this big regex replacement /*$message = preg_replace($pattern, $replace, $message);*/ if (strpos($message, 'quote]') !== false) { $message = str_replace('[quote]', '
', $message); $message = str_replace('[/quote]', '

', $message); } } return $message; } // // Make hyperlinks clickable // function do_clickable($message) { global $cur_user; $message = ' '.$message; $message = preg_replace_callback( '#([\t\n ])([a-z0-9]+?){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i', function($matches) { return $matches[1] . truncate_url($matches[2] . '://' . $matches[3]); }, $message ); $message = preg_replace_callback( '#([\t\n ])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i', function($matches) { return $matches[1] . truncate_url($matches[2] . '.' . $matches[3], $matches[2] . '.' . $matches[3]); }, $message ); return substr($message, 1); } // // Convert a series of smilies to images // function do_smilies($message) { // Here you can add additional smilies if you like (please note that you must escape singlequote and backslash) $text = array(':)', '=)', ':(', '=(', ':D', '=D', ';)', ':x', ':rolleyes:'); $img = array('smile.png', 'smile.png', 'sad.png', 'sad.png', 'big_smile.png', 'big_smile.png', 'wink.png', 'mad.png', 'roll.png'); // Uncomment the next row if you add smilies that contain any of the characters &"'<> // $text = array_map('htmlspecialchars', $text); $message = ' '.$message.' '; $num_smilies = count($text); for ($i = 0; $i < $num_smilies; $i++) $message = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1'.$text[$i].'$2', $message); return substr($message, 1, -1); } // // Parse message text // function parse_message($message, $smilies) { global $cur_user, $permissions, $options; // Deal with some possible "exploits" $message = preg_replace("#javascript:#i", '_javascript_:', $message); $message = preg_replace("#about:#i", '_about_:', $message); if ($options['censoring'] == '1') $message = censor_words($message); if ($permissions['message_html'] == '0') $message = htmlspecialchars($message); // If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched) if (strpos($message, '[code]') !== false && strpos($message, '[/code]') !== false) { list($inside, $outside) = split_text($message, '[code]', '[/code]'); $outside = array_map('trim', $outside); $message = implode('<">', $outside); } if ($options['make_links'] == '1') $message = do_clickable($message); if ($smilies == '1' && $options['smilies'] == '1' && isset($cur_user['show_img']) != '0') $message = do_smilies($message); if ($permissions['message_bbcode'] == '1') { $message = do_bbcode($message); if ($permissions['message_img_tag'] == '1') { if (isset($cur_user['show_img']) != '0') $message = preg_replace('#\[img\](.*?)\[/img\]#s', '', $message); else { if (isset($cur_user['link_to_new_win']) == '0') $message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message); else $message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message); } } } // Deal with newlines, tabs and multiple spaces $pattern = array("\n", "\t", ' ', ' '); $replace = array('
', '    ', '  ', '  '); $message = str_replace($pattern, $replace, $message); // If we split up the message before we have to concatenate it together again (code tags) if (isset($inside)) { $outside = explode('<">', $message); $message = ''; $num_tokens = count($outside); for ($i = 0; $i < $num_tokens; $i++) { $message .= $outside[$i]; if ($inside[$i]) $message .= '

code:

'.trim($inside[$i]).'

'; } } return $message; } // // Parse signature text // function parse_signature($message) { global $cur_user, $permissions, $options; // Deal with some possible "exploits" $message = preg_replace('/javascript:/i', '_javascript_:', $message); $message = preg_replace('/about:/i', '_about_:', $message); if ($options['censoring'] == '1') $message = censor_words($message); if ($permissions['sig_html'] == '0') $message = htmlspecialchars($message); if ($options['make_links'] == '1') $message = do_clickable($message); if ($options['smilies_sig'] == '1' && $cur_user['show_img'] != '0') $message = do_smilies($message); if ($permissions['sig_bbcode'] == '1') { $message = do_bbcode($message); if ($permissions['sig_img_tag'] == '1') { if ($cur_user['show_img'] != '0') $message = preg_replace('#\[img\](.*?)\[/img\]#s', '', $message); else { if ($cur_user['link_to_new_win'] == '0') $message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message); else $message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message); } } } // Deal with newlines, tabs and multiple spaces $pattern = array("\n", "\t", ' ', ' '); $replace = array('
', '    ', '  ', '  '); $message = str_replace($pattern, $replace, $message); return $message; }