// Антимат
function antimat ($text)
{
// Список плохих браузеров, сообщения с которых отправляем на проверку как нецензурные
$browsers = array(
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3",
);
if ($_SERVER['HTTP_USER_AGENT'] && in_array($_SERVER['HTTP_USER_AGENT'], $browsers)) {
return "y";
}
// Проверка по словарям
setlocale(LC_ALL, 'ru_RU.UTF-8');
$text = preg_replace("#ё#ui", "е", $text);
// $text = str_replace("й", "и", $text);
// $text = str_replace("Й", "И", $text);
// $text = str_replace("Ё", "Е", $text);
$text = preg_replace ("#[^a-zA-Zа-яА-Я]#u", "", $text);
$text = mb_strtolower($text, "utf-8");
$mat = new Query("select * from mat");
while ($mat->row()) {
$pos = mb_stripos($text, $mat->row['word'], 0, "utf-8");
if ($pos !== false && not_mat($text, $mat->row['word'], $pos) == false) {
return "y";
}
}
return "n";
}
#################################################
// Проверка на спорные нематерные слова
function not_mat($text, $word, $pos)
{
$qr = new Query("select * from mat_not where instr(word, '$word')");
while ($qr->row()) {
$dif = $pos - mb_stripos($qr->row['word'], $word, 0, "utf-8");
if ($dif < 0) {
$dif = 0;
}
if (strcasecmp(mb_substr($text, $dif, mb_strlen($qr->row['word'], "utf-8"), "utf-8"),$qr->row['word']) === 0) {
return true;
}
}
return false;
}
#################################################
?>
# Post - общий класс для обсуждения и отзывов
class Post extends Page {
var $title = "";
var $name = "";
var $email = "";
var $city = "";
var $text = "";
var $error = "";
var $mat = "n";
var $matReason = "";
var $spam = false;
var $banName = false;
var $banText = false;
var $result = "";
var $guestID = 0;
var $baseUrl = "";
var $antilink = false;
###################################################################
// удаляет повторяющиеся символы
function DelRepeat($str, $ch)
{
$str = preg_replace("#[".$ch."]{2,}#ui", $ch, $str);
return $str;
}
###################################################################
// Идентификация блондинок
function CheckBlond ($text)
{
$lcase = 0;
$ucase = 0;
if (preg_match_all("#([a-zа-я]{1})#u", $text, $match)) {
$lcase = count($match[0]);
}
if (preg_match_all("#([A-ZА-Я]{1})#u", $text, $match)) {
$ucase = count($match[0]);
}
if ($ucase > $lcase) {
return "Пожалуйста, отключите клавишу CAPS LOCK, отпустите клавишу SHIFT и напишите сообщение без чрезмерного использования ЗАГЛАВНЫХ БУКВ.";
} else {
return ;
}
}
###################################################################
// Ищем похожие сообщения или сообщения со ссылками от этого же пользователя
function CheckAntispam($type)
{
$time = time() - 60*10; // ищем сообщения за последние 10 минут
$date = date("Y-m-d H:i:s", $time);
$post_list = array();
$qr = new Query("select * from `$type` where ip='".Ctrl::GetIP()."' and text='$this->text' and post_date>'$date' and id<>'$this->id'");
if ($qr->num() >= 2) {
while ($qr->row()) {
$post_list[] = $qr->row['id'];
}
} elseif ($this->CheckAntilink($this->text)) {
// если не нашли - ищем ссылки в последних сообщениях
$qr = new Query("select * from `$type` where ip='".Ctrl::GetIP()."' and post_date>'$date' and id<>'$this->id' order by id desc");
if ($qr->num() > 0) {
while ($qr->row()) {
if ($this->CheckAntilink($qr->row['text'])) {
$post_list[] = $qr->row['id'];
}
}
}
}
// если нашли 2 и более сообщений
if (count($post_list) >= 2) {
$qr = new Query("select * from `$type` where id in (".implode(",",$post_list).")");
while ($qr->row()) {
// Добавляем в антимат
$insert = new Query("insert into antimat (type, post_id, ip, hash, reason, date) values ('$type', '".$qr->row['id']."', '".Ctrl::GetIP()."', rand(), 'СПАМ', NOW())");
// Обновляем сообщение
$update = new Query("update `$type` set mat='y' where id=".$qr->row['id']);
}
return true;
} else {
return false;
}
}
#######################################################
// Проверяем текст на предыдущий бан
function CheckBanText()
{
if ($this->text) {
$date = date("Y-m-d H:i:s", time() - 86400);
$qr = new Query("select * from ban_text where text='$this->text' and post_date>'$date'");
if ($qr->row()) {
return true;
}
}
return false;
}
#######################################################
// Проверяем имя на бан
function CheckBanName()
{
if ($this->name) {
$qr = new Query("select * from ban where name='$this->name'");
if ($qr->row()) {
return true;
}
}
return false;
}
#######################################################
// Ищем ссылки в тексте
function CheckAntilink($aText)
{
$pattern = "((http:\/\/)?(www\.)?([^\/\s\(\)]+\.(com|net|org|mil|edu|gov|arpa|info|biz|inc|name|[a-zрф]{2})(?!\w+)))";
// Находим всё, что похоже на ссылку, и проверяем является ли это e-mail-ом
if (preg_match_all("#".$pattern."#ui", $aText, $match, PREG_SET_ORDER)) {
for ($i = 0; $i < count($match); $i++) {
if (strpos($match[$i][1], "@") === false) {
return true;
}
}
}
return false;
}
#######################################################
// Бан за буйное раздвоение - 3 ника за 1 час
function CheckMultiName($type)
{
$mult = new Query("select distinct name from $type where ip='".Ctrl::GetIP()."' and mat='n' and name<>'$this->name' and post_date>'".date("Y-m-d H:i:s", time() - 3600)."' and id<>'$this->id'");
if ($mult->num() >= 2) {
while ($mult->row()) {
$qr = new Query("select * from $type where ip='".Ctrl::GetIP()."' and mat='n' and name='".$mult->row['name']."' and post_date>'".date("Y-m-d H:i:s", time() - 3600)."' and id<>'$this->id'");
while ($qr->row()) {
// Добавляем в антимат
$insert = new Query("insert into antimat (type, post_id, ip, hash, reason, date) values ('$type', '".$qr->row['id']."', '".Ctrl::GetIP()."', rand(), 'РАЗДВОЕНИЕ: ".($mult->num()+1)." ника', NOW())");
// Обновляем сообщение
$update = new Query("update `$type` set mat='y' where id=".$qr->row['id']);
}
}
return true;
} else {
return false;
}
}
#######################################################
# Добавляем текст в список заблокированных
function InsertBanText($aCategory, $aObjectID)
{
$qrInsert = new Query("insert into ban_text (category, object_id, name, email, city, text, post_date, ip, browser) values ('".$aCategory."', '".$aObjectID."', '".$this->name."', '".$this->email."', '".$this->city."', '".$this->text."', NOW(), '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."')");
}
###################################################################
# Проверяем все пришедшие данные
function ValidateData()
{
$arFields = array("name", "email", "city", "text");
# Принимаем данные
foreach ($arFields as $sField) {
$this->$sField = isset($_POST['post_'.$sField]) ? Ctrl::CheckString($_POST['post_'.$sField]) : "";
}
# Проверка на бан
$this->error .= $this->CheckBan();
# Проверка на антимат
if ($this->error == "") {
$this->error .= $this->CheckAntimat();
}
# Удаляем повторяющиемся символы
foreach ($arFields as $sField) {
$this->$sField = $this->DelRepeat($this->$sField, "!!");
$this->$sField = $this->DelRepeat($this->$sField, "??");
}
# Блондинки?
if ($this->error == '') {
$this->error = $this->CheckBlond($this->text);
}
// Проверка на двуязычность имени
if ($this->error == '' && preg_match("#[а-я]+#ui", $this->name) && preg_match("#[a-z]+#iu", $this->name) ) {
$this->error = 'Используйте в имени либо только русские, либо только латинские буквы.';
}
// Проверяем e-mail
$this->email = preg_replace("#\s+#u", "", $this->email);
if ($this->email && Ctrl::CheckEmail($this->email) == false) {
$this->email = '';
}
if ($this->error == '' && mb_strlen($this->name, "utf-8") > 100) {
$this->error = 'Слишком длинное имя. Не более 100 символов.';
}
if ($this->error == '' && mb_strlen($this->email, "utf-8") > 100) {
$this->error = 'Слишком длинный e-mail. Не более 100 символов.';
}
if ($this->error == '' && mb_strlen($this->city, "utf-8") > 100) {
$this->error = 'Слишком длинное название города. Не более 100 символов.';
}
// В случае бана - сохраняем запись в отдельном логе
if ($this->error != '' && mb_strpos($this->error, "Вы не можете принимать активное участие в работе сайта", 0, "utf-8") !== false && preg_match("#[а-я]+#iu", $this->text)) {
if (isset($this->hotelID)) {
$this->InsertBanText("review", $this->hotelID);
} else {
$this->InsertBanText($this->category, $this->objectID);
}
}
# Обработка текста
if ($this->text) {
$this->text = $this->BBCodeToHtml($this->text);
$this->text = $this->ClearImgCode($this->text);
$this->text = $this->Wrap($this->text, 200);
}
}
###################################################################
# Делаем полную проверку на мат и спам
function CheckMat()
{
$this->mat = antimat($this->name."aaaa".$this->email."aaaa".$this->city."aaaa".$this->title."aaaa".$this->text);
if ($this->mat == "n") {
// проверяем на спам
$this->spam = $this->CheckAntispam("forum");
if ($this->spam) {
$this->mat = "y";
$this->matReason = "СПАМ";
} else {
// Проверяем текст на предыдущие баны
$this->banText = $this->CheckBanText();
if ($this->banText) {
$this->mat = "y";
$this->matReason = "БАН ТЕКСТА";
} else {
// Проверяем имя на бан
$this->banName = $this->CheckBanName();
if ($this->banName) {
$this->mat = "y";
$this->matReason = "БАН ИМЕНИ";
} else {
// Проверка на спам в статьях
if ($this->GetGuestID() == 0 && $this->CheckAntilink($this->text)) {
$this->mat = "y";
$this->matReason = "ПОДОЗРЕНИЕ НА СПАМ";
} else {
// Бан за буйное раздвоение - 3 ника за 1 сутки
$mult = $this->CheckMultiName("forum");
if ($mult) {
$this->mat = "y";
$this->matReason = "РАЗДВОЕНИЕ: ".($mult+1)." ника";
}
}
}
}
}
}
}
###################################################################
# Проверка на бан
function CheckBan()
{
// Проверяем по IP
$ip_array = explode(", ", Ctrl::GetIP());
foreach ($ip_array as $ip) {
// Проверка на бан
$qr = new Query("select * from ban where ip='$ip' or '$ip' like ip");
if ($qr->row()) {
setcookie("gg_bb", $qr->row['hash'], time() + 365*86400, "/");
$qr = new Query("insert into ban_stat (page, ip, browser, date, referer, error, ban_id) values ('".Ctrl::GetURI()."', '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', NOW(), '".Ctrl::GetReferer()."', 'ban', '".$qr->row['id']."')");
return "Вы не можете принимать активное участие в работе сайта.";
}
// Проверка на куку
if (isset($_COOKIE['gg_bb']) && $_COOKIE['gg_bb']) {
$hash = Ctrl::CheckString($_COOKIE['gg_bb']);
$qr = new Query("select * from ban where hash='$hash'");
if ($qr->row()) {
$qr = new Query("insert into ban_stat (page, ip, browser, date, referer, error, ban_id) values ('".Ctrl::GetURI()."', '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', NOW(), '".Ctrl::GetReferer()."', 'hash', '".$qr->row['id']."')");
return "Вы не можете принимать активное участие в работе сайта.";
}
}
// Првоерка на диапазон
$ip_int = sprintf("%u", ip2long(trim($ip)));
if ($ip_int > 0) {
$qr = new Query("select * from ban where `begin_int`<='$ip_int' and `end_int`>='$ip_int'");
if ($qr->row()) {
setcookie("gg_bb", $qr->row['hash'], time() + 365*86400, "/");
$qr = new Query("insert into ban_stat (page, ip, browser, date, referer, error, ban_id) values ('".Ctrl::GetURI()."', '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', NOW(), '".Ctrl::GetReferer()."', 'ban', '".$qr->row['id']."')");
return "Вы не можете принимать активное участие в работе сайта.";
}
}
// Проверка на анонимайзер
if (stristr(Ctrl::GetBrowser(), "anonymous")) {
$qr = new Query("insert into ban_stat (page, ip, browser, date, referer, error) values ('".Ctrl::GetURI()."', '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', NOW(), '".Ctrl::GetReferer()."', 'anon')");
return "Вы не можете принимать активное участие в работе сайта, используя прокси-сервер.";
}
// Проверка на прокси
$qr = new Query("select count(*) as c from proxy_list where ip='$ip'");
$qr->row();
if ($qr->row['c']) {
$qr = new Query("insert into ban_stat (page, ip, browser, date, referer, error) values ('".Ctrl::GetURI()."', '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', NOW(), '".Ctrl::GetReferer()."', 'proxy')");
return "Вы не можете принимать активное участие в работе сайта, используя прокси-сервер.";
}
// Проверка на браузер
$browser = Ctrl::GetBrowser();
if ($browser) {
$qr = new Query("select * from ban where browser='$browser'");
if ($qr->row()) {
setcookie("gg_bb", $qr->row['hash'], time() + 365*86400, "/");
$qr = new Query("insert into ban_stat (page, ip, browser, date, referer, error, ban_id) values ('".Ctrl::GetURI()."', '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', NOW(), '".Ctrl::GetReferer()."', 'ban', '".$qr->row['id']."')");
return "Вы не можете принимать активное участие в работе сайта.";
}
}
}
// Проверка на chan.ru
if (isset($_COOKIE['gg_ff'])) {
$refer = base64_decode($_COOKIE['gg_ff']);
if ($refer && (stristr($refer, "4chan.") || stristr($refer, "0chan."))) {
$qr = new Query("insert into ban_stat (page, ip, browser, date, referer, error, ban_id) values ('".Ctrl::GetURI()."', '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', NOW(), '".Ctrl::GetReferer()."', 'chan', '".$qr->row['id']."')");
return "Вы не можете принимать активное участие в работе сайта.";
}
}
}
###################################################################
# Ищем человека в списке ожидающих модерацию антимата
function CheckAntimat()
{
$error = "Ваше предыдущее сообщение ожидает проверки модератором.
До окончания проверки вы не сможете писать новые сообщения.
Извините за доставленные неудобства.";
$ips = explode(", ", Ctrl::GetIP());
foreach ($ips as $ip) {
if ($ip && ereg("^127\.0", $ip) == false && ereg("^192\.168", $ip) == false && ereg("^10\.", $ip) == false) {
$qr = new Query("select * from antimat where instr(ip,'".$ip."')");
if ($qr->row()) {
return $error;
}
}
}
$hash_cookie = isset($_COOKIE['gcuu']) ? Ctrl::CheckString($_COOKIE['gcuu']) : "";
Ctrl::MySessionStart();
$hash_session = isset($_COOKIE["gsuu"]) ? $_COOKIE["gsuu"] : (isset($_SESSION["gsuu"]) ? $_SESSION["gsuu"] : "");
$hash_session = Ctrl::CheckString($hash_session);
if ($hash_cookie || $hash_session) {
$qr = new Query("select * from antimat where hash='$hash_cookie' or hash='$hash_session'");
if ($qr->row()) {
return $error;
}
}
}
###################################################################
# Включен JavaScript?
function TestJavaScript($title)
{
$arTest = array("t1"=>"", "t2"=>"", "t3"=>"", "t4"=>"");
foreach ($arTest as $sKey => $sValue) {
$arTest[$sKey] = isset($_POST[$sKey]) ? $_POST[$sKey] : 0;
}
if (($arTest['t2'] != $arTest['t1']*18 + 428) || ($arTest['t3'] != $arTest['t1']*19 + 4361) || ($arTest['t4'] != $arTest['t1']*19 - 54486)) {
$this->error = "В вашем браузере отключено выполнение JavaScript, поэтому вы не можете отправить $title.";
}
#echo $arTest['t2']."
".($arTest['t1']*18 + 428)."
".$arTest['t3']."
".($arTest['t1']*19 + 4361)."
".$arTest['t4']."
".($arTest['t1']*19 - 54486);
#exit();
}
###################################################################
# Конвертируем BB-коды в html
function BBCodeToHtml ($aString)
{
$aString = preg_replace( "#\[b\](.+?)\[/b\]#is", "\\1", $aString );
$aString = preg_replace( "#\[i\](.+?)\[/i\]#is", "\\1", $aString );
$aString = preg_replace( "#\[u\](.+?)\[/u\]#is", "\\1", $aString );
$aString = preg_replace( "#\[s\](.+?)\[/s\]#is", "\\1", $aString );
// удаляем пустые тэги
$aString = preg_replace( "#\[b\]\[/b\]#is", "", $aString );
$aString = preg_replace( "#\[i\]\[/i\]#is", "", $aString );
$aString = preg_replace( "#\[u\]\[/u\]#is", "", $aString );
$aString = preg_replace( "#\[s\]\[/s\]#is", "", $aString );
$aString = preg_replace( "#\[quote\]\[/quote\]#is", "", $aString );
$aString = preg_replace( "#\[url\]\[/url\]#i" , "\\1", $aString );
// цитаты
$aString = preg_replace( "#\[quote([^\]])#is", "[quote]\\1", $aString );
$aString = preg_replace( "#\[/quote([^\]])#is", "[/quote]\\1", $aString );
$aString = preg_replace( "#([^\[\/])quote\]#is", "\\1[quote]", $aString );
$aString = preg_replace( "#([^\[])/quote\]#is", "\\1[/quote]", $aString );
$aString = preg_replace( "#\[quote\]\[/quote\]#is", "", $aString );
$aString = preg_replace( "#\[quote\](.+?)\[/quote\]
\n#is", "\\1", $aString );
$aString = preg_replace( "#\[quote\](.+?)\[/quote\]#is", "\\1", $aString );
// исправляем ошибку с вложенными цитатами
$aString = preg_replace( "#\[/quote\](.*?)\[quote\]#is", "\\1", $aString );
$aString = preg_replace( "#\[quote\](.+?)<\/span>\[/quote\]#is", "\\1", $aString );
// Убираем лишний br после цитаты
$aString = preg_replace( "#<\/span>\s*
#is", "", $aString );
// (c) (r) and (tm)
$aString = preg_replace( "#\(c\)#i" , "©" , $aString );
$aString = preg_replace( "#\(tm\)#i" , "" , $aString );
$aString = preg_replace( "#\(r\)#i" , "®" , $aString );
// email tags
// [email]matt@index.com[/email] [email=matt@index.com]Email me[/email]
$aString = preg_replace( "#\[email\](\S+?)\[/email\]#i" , "\\1", $aString );
$aString = preg_replace( "#\[email\s*=\s*\"\;([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\s*\"\;\s*\](.*?)\[\/email\]#i" , "\\2", $aString );
$aString = preg_replace( "#\[email\s*=\s*([\.\w\-]+\@[\.\w\-]+\.[\w\-]+)\s*\](.*?)\[\/email\]#i" , "\\2", $aString );
// url tags
// [url]http://www.index.com[/url] [url=http://www.index.com]ibforums![/url]
$aString = preg_replace( "#\[url\](\S+?)\[/url\]#i" , "\\1", $aString );
$aString = preg_replace( "#\[url\s*=\s*\"\;\s*(\S+?)\s*\"\;\s*\](.*?)\[\/url\]#i" , "\\2", $aString );
$aString = preg_replace( "#\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]#i" , "\\2", $aString );
$aString = trim($aString);
return $aString;
}
###################################################################
// Разбиение длинных слов по указанной длине
function Wrap ($text, $width) {
$text_array = explode(" ", $text);
$text = "";
foreach ($text_array as $value) {
$len = mb_strlen($value, "utf-8");
if ($len > $width) {
for ($i=0; $i\[IMG\](http\S+)\[/IMG\]#isu", "target=_blank>\\1", $text);
$text = preg_replace("#(?|\])\[IMG\](http\S+)\[/IMG\](?!\[|\)#isu", "\\1", $text);
return $text;
}
###################################################################
# сохраняем в куках имя, email и город
function SaveNames()
{
if (!isset($_COOKIE['gg_name']) || $_COOKIE['gg_name'] != $this->name) {
setcookie("gg_name", $this->name, time()+365*86400, "/");
}
if ($this->email && (!isset($_COOKIE['gg_email']) || $_COOKIE['gg_email'] != $this->email)) {
setcookie("gg_email", $this->email, time()+365*86400, "/");
}
if ($this->city && (!isset($_COOKIE['gg_city']) || $_COOKIE['gg_city'] != $this->city)) {
setcookie("gg_city", $this->city, time()+365*86400, "/");
}
}
###################################################################
// Получаем гостевую сессию посетителя
function GetGuestID()
{
if ($this->guestID == 0) {
# Ищем в куках
if (isset($_COOKIE['gg_uu']) && $_COOKIE['gg_uu']) {
$s = explode("_", $_COOKIE['gg_uu']);
$login = intval($s[0]);
$password = intval($s[1]);
if ($login && $password) {
$qr = new Query("select * from guest where login='$login' and password='$password'");
if ($qr->row()) {
$this->guestID = $qr->row['id'];
$update = new Query("update guest set last_date=NOW(), last_ip='".Ctrl::GetIP()."', last_browser='".Ctrl::GetBrowser()."' where id=".$qr->row['id']);
}
}
}
}
return $this->guestID;
}
###################################################################
// Создаем гостевую сессию посетителя
function SetGuestID()
{
if ($this->guestID == 0) {
$login = mt_rand(0, 9876543) - round(((double) microtime()) * 10000);
if ($login < 0) {
$login = abs($login);
} elseif ($login == 0) {
$login = round(((double) microtime()) * 100000);
}
$password = mt_rand(0, 8888888) + round(((double) microtime()) * 100000);
$qr = new Query("insert into guest (reg_date, reg_ip, reg_browser, reg_lang, login, password) values (NOW(), '".Ctrl::GetIP()."', '".Ctrl::GetBrowser()."', '".Ctrl::GetLanguage()."', '$login', '$password')");
if ($qr->success) {
$this->guestID = $qr->insert_id();
setcookie("gg_uu", $login."_".$password, time()+365*86400, "/");
}
}
}
###################################################################
# Возвращаем базовый url форума
function GetBaseUrl()
{
return $this->baseUrl;
}
###################################################################
// Добавляем запись в антимат
function AddAntimat ($type, $post_id, $reason = "")
{
$hash = md5("{$post_id}{$type}".Ctrl::GetIP());
$insert = new Query("insert into antimat (type, post_id, ip, hash, reason, date) values ('$type', '$post_id', '".Ctrl::GetIP()."', '$hash', '$reason', NOW())");
setcookie ("gcuu", $hash, time()+365*86400, "/");
Ctrl::MySessionStart();
session_register("gsuu");
$_SESSION["gsuu"] = $hash;
return "Ваше сообщение сохранено и появится на сайте в течение нескольких часов после проверки модератором.
До окончания проверки вы не сможете писать новые сообщения.
Извините за доставленные неудобства.";
}
###################################################################
// Ссылка для возврата назад
function PrintBackLink()
{
if (DESKTOP) {
return <<<< Вернуться назад
TXT;
} else {
return <<Вернуться назад
TXT;
}
}
###################################################################
# Переводим тэги html в bbcode
function HtmlToBBCode($aString)
{
// url tags
// [url]http://www.index.com[/url] [url=http://www.index.com]ibforums![/url]
$aString = preg_replace( "#(.+?)#i" , "[url=\\1]\\2[/url]", $aString );
$aString = preg_replace( "#(.+?)#i" , "[url=\\1]\\2[/url]", $aString );
$aString = preg_replace( "#(.+?)#i" , "[url=\\1]\\2[/url]", $aString );
$aString = preg_replace( "#(.+?)#is", "[b]\\1[/b]", $aString );
$aString = preg_replace( "#(.+?)#is", "[b]\\1[/b]", $aString );
$aString = preg_replace( "#(.+?)#is", "[i]\\1[/i]", $aString );
$aString = preg_replace( "#(.+?)#is", "[i]\\1[/i]", $aString );
$aString = preg_replace( "#(.+?)#is", "[u]\\1[/u]", $aString );
$aString = preg_replace( "#(.+?)#is", "[s]\\1[/s]", $aString );
$aString = preg_replace( "#(.+?)#is", "[quote]\\1[/quote]\n", $aString );
// Спойлер
$aString = preg_replace( "##is" , "[spoiler=\\1]\\2[/spoiler]", $aString );
// (c) (r) and (tm)
$aString = preg_replace( "#©#i" , "(c)" , $aString );
$aString = preg_replace( "#&\#153;#i" , "(tm)" , $aString );
$aString = preg_replace( "#®#i" , "(r)" , $aString );
$aString = str_replace( "\" ,"\\" , $aString);
// email tags
// [email]matt@index.com[/email] [email=matt@index.com]Email me[/email]
$aString = preg_replace( "#(.+?)#i" , "[email=\\1]\\2[/email]", $aString );
$aString = strip_tags($aString);
$aString = trim($aString);
return $aString;
}
###################################################################
# Возвращаем результат выполнения операции
function GetResult()
{
return $this->result;
}
###################################################################
# Возвращаем текст сообщения или отзыва
function GetText()
{
return $this->text;
}
###################################################################
}
?>