Ночной странник

Сообщения: 4050
Благодарности: 83
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
Prisoner
Код: 
<?php
// коды для вставки картинок
$Codes["img"] = array(
// esc [[img]], [[/img]], [[img=*]] => [img], [/img], [img=*]
"#\[\[(/?)img\]\]#is" => "[$1img]",
"#\[\[img=(\S+?)\]\]#is" =>"[img=$2]",
// Безопасность: убираем потенциальные ссылки на скрипты (\s* - защита от IE)
"#\[img=.*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\]#is" =>
"[img=<font class=\"warning\">«предупреждение: скрипты в постах запрещены»</font>]",
"#\[img\].*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\[/img\]#is" =>
"[img]<font class=\"warning\">«предупреждение: скрипты в постах запрещены»</font>[/img]",
// Безопасность: убираем картинки, ссылающиеся на e-mail (назойливая штука)
"#\[img=[^]]*?mailto:[^]]*?\]#is" =>
"[img=<font class=\"warning\">«предупреждение !»</font>]",
"#\[img\][^]]*?mailto:[^]]*?\[/img\]#is" =>
"[img]<font class=\"warning\">«предупреждение !»</font>[/img]",
"#\[img=(\S+?)\]\s*(?!.*?\[(?:img).*?)(.+?)\s*\[/img\]#is" =>
"<img src=\"$1\" alt=\"$2\" title=\"$2\" />",
"#\[img]\s*(?!.*?\[(?:img).*?)(.+?)\s*\[/img\]#is" =>
"<img src=\"$1\" alt=\"$1\" title=\"\" />",
"#\[img=(\S+?)\]#is" =>
"<img src=\"$1\" alt=\"$1\" />",
);
// простые коды
$Codes["easy"] = array(
// esc кодов с непосредственным html-эквивалентом
"#\[\[(/?)(b|i|u|s|strike|small|center|pre|tt|sub|sup)\]\]#is" => "[$1$2]",
"#\[\[(br|hr)\]\]\n?#i" => "[$1]",
// Коды с непосредственным html-эквивалентом
"#\[(b|i|u|s|strike|small|center|pre|tt|sub|sup)\](.+?)\[/\\1\]#is" => "<$1>$2</$1>",
"#\[br\]\n?#i" => "<br />",
"#\[hr\]\n?#i" => "<hr width=\"40%\" align=\"left\" />",
// (c) (r) and (tm)
"#\(c\)#i" => "©",
"#\(tm\)#i" => "™",
"#\(r\)#i" => "®",
);
// коды цитирования
$Codes["quote"] = array(
// esc [q] [quote]
"#\[\[(/?)(q|quote)\]\]#is" => "[$1$2]",
"#\[\[(q|quote)=(\S+?)\]\]#is" =>"[$1=$2]",
// [quote] без автора
"#\[(q|quote)\](.*?)\[/\\1]#is" => "<blockquote class=\"title\">Цитата:</blockquote><blockquote class=\"body\">$2</blockquote>",
// "#\[(q|quote)=(.*?)\](.*?)\[/\\1]#is" => "<blockquote class=\"title\">Цитата ([user=$2]):</blockquote><blockquote class=\"body\">$3</blockquote>",
);
// коды ссылок
$Codes["url"] = array(
// esc [url] [MAIL]
"#\[\[(/?)(url|mail)\]\]#is" => "[$1$2]",
"#\[\[(url|mail)=(\S+?)\]\]#is" =>"[$1=$2]",
// Безопасность: убираем потенциальные ссылки на скрипты (\s* - защита от IE)
"#\[(?:url|mail)=.*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\]#is" =>
"<font class=\"warning\">«предупреждение: скрипты в постах запрещены»</font>",
"#\[(url|mail)\].*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\[/\\1\]#is" =>
"<font class=\"warning\">«предупреждение: скрипты в постах запрещены»</font>",
// [url]
"#\[url]\s*?(?!.*?\[(?:url).*?)(.*?)\s*?\[/url\]#is" =>
"<a href=\"$1\">$1</a>",
"#\[url=(\S*?)\]\s*?(?!.*?\[(?:url).*?)(.*?)\s*?\[/url\]#is" =>
"<a href=\"$1\">$2</a>",
"#\[url=(\S*?)\]#is" =>
"<a href=\"$1\">$1</a>",
// [MAIL]
"#\[mail]\s*?(?!.*?\[(?:mail).*?)(.*?)\s*?\[/mail\]#is" =>
"<a href=\"mailto:$1\">$1</a>",
"#\[mail=(\S*?)\]\s*?(?!.*?\[(?:mail).*?)(.*?)\s*?\[/mail\]#is" =>
"<a href=\"mailto:$1\">$2</a>",
"#\[mail=(\S*?)\]#is" =>
"<a href=\"mailto:$1\">$1</a>",
);
// коды для работы с текстом
$Codes["font"] = array(
// esc Кодов свойств шрифта [font] (face), [size], [color], [right]:
"#\[\[(font|size|color)=(.+?)\]\]#is" => "[$1=$2]",
"#\[\[/(font|size|color|right)\]\]#i" => "[/$1]",
"#\[\[right\]\]#i" => "[right]",
// Коды свойств шрифта [font] (face), [size], [color], [right]:
"#\[font=(.+?)\](.+?)\[/font\]#is" => "<font face=\"$1\">$2</font>",
"#\[(size|color)=(\S+?)\](.+?)\[/\\1\]#is" => "<font $1=\"$2\">$3</font>",
"#\[right\](.+?)\[/right\]#is" => "<font align=\"right\">$1</font>",
);
// коды info
$Codes["info"] = array(
//esc info tags
"#\[\[info:version\]\]#is" => "[info:version]",
"#\[\[info:author\]\]#is" => "[info:author]",
"#\[\[info:random\]\]#is" => "[info:random]",
"#\[\[info:random=(\d+?)\]\]#is" => "[info:random=$1]",
//info tags
"#\[info:version\]#is" => "VParser 1.0.1",
"#\[info:author\]#is" => "Vladislav Mokeev[Vlad]",
"#\[info:random\]#ise" => "rand(0,100)",
"#\[info:random=(\d+?)\]#ise" => "rand(0,$1)",
);
// коды оффтопика
$Codes["off"] = array(
// esc codes
"#\[\[(/?)off\]\]#is" => "[$1off]",
// [off] - оффтопик
"#\[off\]\s*(.+?)\s*\[/off\]#is" => "<font class=\"offtopic\">оффтопик: $1</font>",
"#/\*\s*(.+?)\s*\*/#is" => "<font class=\"offtopic\">оффтопик: $1</font>",
);
//расширенные коды
$Codes["added"] = array(
// esc codes
"#\[\[(user|def|acr|added)=(.+?)\]\]#is" => "[$1=$2]",
"#\[\[/(def|acr|added)\]\]#i" => "[/$1]",
"#\[\[(added|time|date)\]\]#i" => "[$1]",
// Тег [user] - прямая ссылка на юзера
"#\[user=(.+?)\]#is" => "<a class=\"profile\" href=\"./profile.php?name=$1\">$1</a>",
// VParser 1.0.1: Теги [def] и [acr] - определение (всплывающая подсказка) для слова
"#\[def=(.+?)\]\s*(.+?)\s*\[/def\]#is" => "<a class=\"definition\" title=\"$1\">$2</a>",
"#\[acr=(.+?)\]\s*(.+?)\s*\[/acr\]#is" => "<acronym title=\"$1\">$2</acronym>",
// VParser 1.0.1:
"#\[added\](.+?)\[/added\]#is" => "<font class=\"added-title\">Добавлено:</font><br>$1",
"#\[added=(.+?)\](.+?)\[/added\]#is" => "<font class=\"added-title\">Добавлено ($1):</font><br>$2",
"#\[time\]#ie" => "'<span class=\"date\">'. date('G:i:s'). '</span>'",
"#\[date\]#ie" => "'<span class=\"time\">'. date('d.m.Y'). '</span>'",
);
// коды для вырезания не пропарсенных тегов
$Codes["delete"] = array(
// Удаление лишних (известных) тегов
"#\[/?(?:font|size|off|b|i|u|s|color|url|link|mail|img|image|center|right|pre|list|user|acr|def|info|time|date|debug|added).*?\]#is" => "",
);
?>
вот такие рег експы.
а вот так из надо применять:
Код: 
foreach($Codes["url"] as $rule => $value)
while ( preg_match( $rule, $raw ) )
$raw = preg_replace($rule, $value, $raw, -1);
надеюсь снял все вопросы по данной теме?
PS
рег експы проверенный и вроде все баги пофиксены, и дыры тоже.
если что найдешь, то обязятельно напиши!
|